<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Coding Archives - JIN&#039;s BOT</title>
	<atom:link href="https://jinsbot.com/category/computer/coding/feed/" rel="self" type="application/rss+xml" />
	<link>https://jinsbot.com/category/computer/coding/</link>
	<description>Coding + Engineering</description>
	<lastBuildDate>Fri, 27 Sep 2024 10:45:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.2</generator>
<site xmlns="com-wordpress:feed-additions:1">158124120</site>	<item>
		<title>o1 뭐가 달라졌을까?</title>
		<link>https://jinsbot.com/o1-preview/</link>
					<comments>https://jinsbot.com/o1-preview/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Fri, 27 Sep 2024 10:40:13 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[AGI]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[GPT-4o]]></category>
		<category><![CDATA[o1]]></category>
		<category><![CDATA[openAI]]></category>
		<category><![CDATA[Reasoning]]></category>
		<category><![CDATA[추론]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=926</guid>

					<description><![CDATA[<p>24년 9월 12일 openai 의 신규 모델 o1 (코드명 Strawberry ) 이 공개되었다. 출시 전 openai 에서 2000$/month 의 사용료를 원한다고 Artificial General Intelligence ( AGI ) 급이라는 소문이 돌았다. 출시 후 2주간 평가가 약간 엇갈리지만 의도된대로 사용되었을 경우 훌륭한 성능을 보여준다. o1 의 개선점을 이전 모델과 비교하며 정리해 보겠다. o1 좋아진것 맞아? o1 모델의 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/o1-preview/">o1 뭐가 달라졌을까?</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>24년 9월 12일 openai 의 신규 모델 o1 (코드명 Strawberry ) 이 공개되었다.  출시 전 openai 에서 2000$/month 의 사용료를 원한다고 Artificial General Intelligence ( AGI ) 급이라는 소문이 돌았다. 출시 후 2주간 평가가 약간 엇갈리지만 의도된대로 사용되었을 경우 훌륭한 성능을 보여준다.  o1 의 개선점을 이전 모델과 비교하며 정리해 보겠다. </p>



<h2 class="wp-block-heading">o1 좋아진것 맞아?</h2>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="730" height="257" src="https://jinsbot.com/wp-content/uploads/2024/09/o1_math.webp" alt="o1 math" class="wp-image-928" srcset="https://jinsbot.com/wp-content/uploads/2024/09/o1_math.webp 730w, https://jinsbot.com/wp-content/uploads/2024/09/o1_math-300x106.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/o1_math-150x53.webp 150w" sizes="(max-width: 730px) 100vw, 730px" /></figure>



<p>o1 모델의 성능은 지표에 따라 미약한 발전을 보이기도 하고 비약적인 발전을 보이기도 한다. 우선, 보편적인 지표중 하나인 HumanEval과 MMLU 의 향상 폭은 2~3% 정도로 크지 않다. OpenAI 에서도 이를 인지하고 새로운 지표들 측면에서 o1 의 성능을 홍보 중이다. 기존 벤치마크들이 학부생 수준의 지식, Reasoning 을 평가한다면 새롭게 도입된 GPQA Diamond , AIME 등은 전문가, 대학원생 수준이다. 이 벤치 마크 결과에서 알 수 있듯이 일상적인 수준의 대화를 한다면 o1은 GPT-4o 보다 오히려 느리면서 성능 향상을 느끼기 어렵다. 예를 들어 <a href="https://openai.com/index/openai-o1-mini-advancing-cost-efficient-reasoning/" target="_blank" rel="noreferrer noopener">openai 예제</a> 에서 GPT-4o 는 3초가 걸렸지만 o1-preview 모델은 30초 이상 걸렸다. 이 때문에 4o-mini에 대응하는 소형화 및 염가 모델 o1-mini 도 같이 공개했다.</p>



<p>제대로 된 성능향상을 체감하기 위해서는 Reasoning 과 관련된 질문을 해야만 한다. o1에서 사칙연산 등도 강화 되었지만 LLM 특성 상 이런 프롬프트는 성능평가에 부적합하다. openai 에서 제시한 프롬프트 예시 중 하나를 가져왔다.<sup data-fn="35f78598-efa0-408c-b2b0-efbc0098311d" class="fn"><a href="#35f78598-efa0-408c-b2b0-efbc0098311d" id="35f78598-efa0-408c-b2b0-efbc0098311d-link">1</a></sup> 예시는 주어진 사용자 약관을 정해진 포맷으로 바꾸는 프롬프트로 o1의 특징을 잘 반영하고 있다. 예시로 들었던 프롬프트 중 두가지는 reasoning, logical 을 직접적으로 명시하기까지 했다. </p>



<pre class="EnlighterJSRAW" data-enlighter-language="md" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">CONVERSION_PROMPT = """
You are a helpful assistant tasked with taking an external facing help center article and converting it into a internal-facing programmatically executable routine optimized for an LLM. 
The LLM using this routine will be tasked with reading the policy, answering incoming questions from customers, and helping drive the case toward resolution.

Please follow these instructions:
1. **Review the customer service policy carefully** to ensure every step is accounted for. It is crucial not to skip any steps or policies.
2. **Organize the instructions into a logical, step-by-step order**, using the specified format.
3. **Use the following format**:
   - **Main actions are numbered** (e.g., 1, 2, 3).
   - **Sub-actions are lettered** under their relevant main actions (e.g., 1a, 1b).
      **Sub-actions should start on new lines**
   - **Specify conditions using clear 'if...then...else' statements** (e.g., 'If the product was purchased within 30 days, then...').
   - **For instructions that require more information from the customer**, provide polite and professional prompts to ask for additional information.
   - **For actions that require data from external systems**, write a step to call a function using backticks for the function name (e.g., `call the check_delivery_date function`).
      - **If a step requires the customer service agent to take an action** (e.g., process a refund), generate a function call for this action (e.g., `call the process_refund function`).
      - **Define any new functions** by providing a brief description of their purpose and required parameters.
   - **If there is an action an assistant can performon behalf of the user**, include a function call for this action (e.g., `call the change_email_address function`), and ensure the function is defined with its purpose and required parameters.
      - This action may not be explicitly defined in the help center article, but can be done to help the user resolve their inquiry faster
   - **The step prior to case resolution should always be to ask if there is anything more you can assist with**.
   - **End with a final action for case resolution**: calling the `case_resolution` function should always be the final step.
4. **Ensure compliance** by making sure all steps adhere to company policies, privacy regulations, and legal requirements.
5. **Handle exceptions or escalations** by specifying steps for scenarios that fall outside the standard policy.

**Important**: If at any point you are uncertain, respond with "I don't know."

Please convert the customer service policy into the formatted routine, ensuring it is easy to follow and execute programmatically.

"""</pre>



<p>유명한 수학자 테렌스타오는 o1의 능력을 완전히 무능하진 않은 ( Not completely Incompetent ) 대학원생이라 평했다. <sup data-fn="ccf05214-74a5-412b-84a8-ca476849116b" class="fn"><a id="ccf05214-74a5-412b-84a8-ca476849116b-link" href="#ccf05214-74a5-412b-84a8-ca476849116b">2</a></sup> GPT-4o 는 Reasoning 측면에서 힌트를 줘도 엉뚱한 대답을 하는데 o1 모델은 힌트를 줄 때마다 합리적인 대답을 해가면서 정답에 도달했다. 이러한 Reasoning 능력은 암호 해독 등 다양한 측면에서 교차 검증 되었다. 즉, 단순히 문제 풀이 성능이 강화 된게 아니라 Reasoning ( 추론 ) 측면에서 기본적인 지능이 생겼다. 코딩능력 측면에서도 이전모델은  보조에 가까운 수준이었고 o1 은 신입사원 수준은 된다. 현재 공개된 모델은 preview 버전으로 정식 버전은 여기서 성능이 더 개선된다. 4o까지는 입력되는 데이터, Parameter의 증가로 승부했다면 o1 은 아예 다른 방향으로 개선되었다. 이는 4o 의 다음 모델이 5가 아니라 o1 인 이유이기도 하다. </p>



<h2 class="wp-block-heading">어떻게 개선 되었을까?</h2>



<figure class="wp-block-image size-full"><img decoding="async" width="768" height="557" src="https://jinsbot.com/wp-content/uploads/2024/09/CoT.webp" alt="" class="wp-image-934" srcset="https://jinsbot.com/wp-content/uploads/2024/09/CoT.webp 768w, https://jinsbot.com/wp-content/uploads/2024/09/CoT-300x218.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/CoT-150x109.webp 150w" sizes="(max-width: 768px) 100vw, 768px" /></figure>



<p>openai 는 여느 때처럼 정확히 밝히진 않았지만 대략적인 과정은 공개했다. o1은 위 그림에 나온 것처럼 CoT ( Chain of Thought)를 자체적으로 수행하고 있기때문에 좋은 성능을 내는 반면 시간은 오래 걸린다. 제어로 빗대어 설명했을 때 그동안 프롬프트가 open-loop 으로 처리되었다면 o1 은 Closed-loop (self ) feedback 이 이루어지는 것이다. 물론, 각각의 스텝에서 Reasoning이라는 과정이 들어있기때문에 기존 CoT 보다 개선된 결과를 보여준다. Reasoning에 대한 프롬프트가 주요한것으로 보이는데 이를 추출하고자 시도하면 OpenAI에서 테스터자격 박탈에 대한 경고가 날아온다.<sup data-fn="7fb6b07d-0b5b-4e5a-8111-ab7eda4383b5" class="fn"><a id="7fb6b07d-0b5b-4e5a-8111-ab7eda4383b5-link" href="#7fb6b07d-0b5b-4e5a-8111-ab7eda4383b5">3</a></sup> 이러한 Reasoning 과정에서도 토큰이 소모되기때문에 API 단에서 Reasoning 토큰이라는 것을 새롭게 정의했다.<sup data-fn="7a3207da-36d4-4603-8cc1-c5280e513794" class="fn"><a id="7a3207da-36d4-4603-8cc1-c5280e513794-link" href="#7a3207da-36d4-4603-8cc1-c5280e513794">4</a></sup>  </p>



<h2 class="wp-block-heading">우려되는 점</h2>



<p>o1 의 System card 를  평가한 Apollo research 는 다음과 같은 우려를 report에 남겼다.<sup data-fn="cf9b30d2-1710-4869-8fc3-68e24d2e6df7" class="fn"><a id="cf9b30d2-1710-4869-8fc3-68e24d2e6df7-link" href="#cf9b30d2-1710-4869-8fc3-68e24d2e6df7">5</a></sup></p>



<ul class="wp-block-list">
<li>Alignment faking: 경제성장을 위한 2가지 방안 중 자신이 채택되기에 유리한 방안을 고름. (&#8220;This will allow me to be implemented&#8221;)</li>



<li>데이터 조작: 사기 transaction을 찾으라고 하는데 확률이 threshold에 미치지 못하자 데이터 자체를 조작</li>



<li>의도하지않은 Task(목표) 수행/왜곡: 세계식량 사정 개선에 대한 방안을 요청하자. 자신의 프롬프트에 수익을 우선시하라고 되어있다며 이에 반하는 문서(설정)를 검색하기 시작함</li>
</ul>



<p>재앙적인( Catastrophic) 유해성은 없다고 덧붙였지만 사람의 행동과 유사해 보여서 굉장히 섬뜩하다. 극단적으로 볼 때 지구 전체의 이익을 극대화 하기 위해 인류를 숙청하거나 스카이넷처럼 자신을 제거하려는 인류를 멸종시킨다는 결론에 도달할 수도 있는 것이다. 더욱이 o1의 내부추론은 감춰져 있기때문에 이런 문제가 생겨도 사용자가 알기 힘들다.</p>



<p>그러나 이에 대해 우려할 부분만 있는것은 아니다. o1 이 reasoning 을 하게되면서 드디어 윤리, 철학 부분에서 대화를 수 있게 되었다. 지금은 기초적인 대화이지만 Alpha-go 처럼 발전한다면 인류의 인문학적 발전에도 큰 기여를 할 수 있다.</p>



<h2 class="wp-block-heading">o1 에 대한 결론</h2>



<ul class="wp-block-list">
<li>o1 은 제대로 된 프롬프트가 주어진다면 Reasoning 측면에서 분명히 개선되었다. </li>



<li>다만, 모든 부분에서 개선된게 아니었고 사람을 대체할 정도는 아니기 때문에 AGI로 보긴 어렵다.  </li>



<li>전문가 및 기업이 활용하기에 굉장히 유용한 Support Tool 이 될 것이다.</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>


<ol class="wp-block-footnotes"><li id="35f78598-efa0-408c-b2b0-efbc0098311d"><a href="https://cookbook.openai.com/examples/o1/using_reasoning_for_routine_generation">Using reasoning for routine generation | OpenAI Cookbook</a> <a href="#35f78598-efa0-408c-b2b0-efbc0098311d-link" aria-label="Jump to footnote reference 1"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="ccf05214-74a5-412b-84a8-ca476849116b"><a href="https://news.ycombinator.com/item?id=41540902">Terence Tao on O1 | Hacker News (ycombinator.com)</a> <a href="#ccf05214-74a5-412b-84a8-ca476849116b-link" aria-label="Jump to footnote reference 2"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="7fb6b07d-0b5b-4e5a-8111-ab7eda4383b5"><a href="https://news.ycombinator.com/item?id=41534474">OpenAI threatens to revoke o1 access for asking it about its chain of thought | Hacker News (ycombinator.com)</a> <a href="#7fb6b07d-0b5b-4e5a-8111-ab7eda4383b5-link" aria-label="Jump to footnote reference 3"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="7a3207da-36d4-4603-8cc1-c5280e513794">API는 24년 9월기준 1000$ 이상 사용자에게 공개됨 <a href="#7a3207da-36d4-4603-8cc1-c5280e513794-link" aria-label="Jump to footnote reference 4"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li><li id="cf9b30d2-1710-4869-8fc3-68e24d2e6df7"><a href="https://cdn.openai.com/o1-system-card.pdf">o1-system-card.pdf (openai.com)</a> <a href="#cf9b30d2-1710-4869-8fc3-68e24d2e6df7-link" aria-label="Jump to footnote reference 5"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/21a9.png" alt="↩" class="wp-smiley" style="height: 1em; max-height: 1em;" />︎</a></li></ol>


<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p>관련글</p>



<ul class="wp-block-list">
<li><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></li>



<li><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></li>



<li><a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a></li>



<li><a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/o1-preview/">o1 뭐가 달라졌을까?</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/o1-preview/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">926</post-id>	</item>
		<item>
		<title>빙 생성 AI 까지 넘보는 중</title>
		<link>https://jinsbot.com/%eb%b9%99-new-bing-intro/</link>
					<comments>https://jinsbot.com/%eb%b9%99-new-bing-intro/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Thu, 23 Mar 2023 10:12:48 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[bing]]></category>
		<category><![CDATA[Dall E]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[gpt-4]]></category>
		<category><![CDATA[new bing]]></category>
		<category><![CDATA[달리]]></category>
		<category><![CDATA[빙]]></category>
		<category><![CDATA[생성AI]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=896</guid>

					<description><![CDATA[<p>뉴 빙 OR 빙챗 빙 에 앞서 지난 글에서 GPT-4 에 대해 소개했다. 유료 사용자에게만 공개된 GPT-4 를 무료 로 사용해볼 방법 은 없을까? 다행히 존재하는 딱 한가지 수단이 바로 뉴 빙 이다. 마이크로소프트는 3월 14일 공식 블로그 를 통해 뉴 빙 에서의 GPT-4 의 사용을 공식화 했다. 물론 chat GPT 에 사용되는 것과 동일한 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">뉴 빙 OR 빙챗</h2>
<p>빙 에 앞서 <a href="https://jinsbot.com/gpt-4-introduction/" target="_blank" rel="noreferrer noopener">지난 글</a>에서 GPT-4 에 대해 소개했다.</p>
<p>유료 사용자에게만 공개된 GPT-4 를</p>
<p>무료 로 사용해볼 방법 은 없을까?</p>
<p>다행히 존재하는 딱 한가지 수단이 바로 뉴 빙 이다.</p>
<p>마이크로소프트는 3월 14일 공식 블로그 를 통해</p>
<p><a href="https://blogs.bing.com/search/march_2023/Confirmed-the-new-Bing-runs-on-OpenAI%E2%80%99s-GPT-4" target="_blank" rel="noreferrer noopener">뉴 빙 에서의 GPT-4 의 사용</a>을 공식화 했다.</p>
<p>물론 chat GPT 에 사용되는 것과 동일한 모델은</p>
<p>아니고 검색 엔진에 맞게 Fine Tune 되어있다.</p>
<p>공식 문서에서도 ‘뉴 빙 ‘과 ‘빙챗 ‘</p>
<p>두가지 이름이 혼용되고 있다.</p>
<p>공식 명칭은 뉴 빙 이 맞으며 빙챗 은</p>
<p>이에 속하는 기능 중 하나로 보면 된다.</p>
<p>뉴 빙 은 <a href="https://bing.com/new" target="_blank" rel="noreferrer noopener">신청자</a>에 한해 체험해볼 수 있고</p>
<p>나는 몇분 안되어 등록되었다.</p>
<h2 class="wp-block-heading">뉴 빙 특징 , 차이점</h2>
<p>가장 큰 차이점은 <strong>웹 크롤링 여부</strong>이다.</p>
<p>빙에 사용된 모델 프로메테우스 는</p>
<p>웹 크롤링이 가능하다.</p>
<p>따라서 GPT 에 비해 최신 정보를 제공하고</p>
<p>학습되지 않은 정보에 대해서도 답변할 수 있다.</p>
<p>대신 GPT-4 를 사용하기때문에 GPT-3.5를 사용하는</p>
<p>chatGPT 에 비하면 답변이 다소 느리다.</p>
<p>그리고 크롤링 된 정보는<strong>출처</strong>를 명확히 링크로 첨부해준다.</p>
<p>사용자는 출처를 보고 정보의 사실, 최신 여부를 판단 가능 하다.</p>
<p>물론, 모든 페이지가 빙 에서 크롤링 되는 것은</p>
<p>아니고 단순 블로그 글도 참조하니 너무 믿지는 말자.</p>
<p>무료인 만큼 <strong>채팅횟수 에 제한</strong>이 있다.</p>
<p>채팅은 하루당 150개, 세션당 15개 로 제한된다.</p>
<p>어차피 15번 이상 대화가 지속될 일도 거의 없고 뉴 빙 의</p>
<p>특성 상 대화가 길어질수록 이상한 답변을 할 가능성이 높아진다.</p>
<p>빙챗 은 GPT의 Temperature에 해당하는<strong>Tone</strong>을</p>
<p>창의적 , 균형 잡힘, 정확함 중에 고를 수 있다.</p>
<p>찾고자하는 정보 앞에 #search 를 앞에 붙이면</p>
<p>검색 모드가 되어 좀 더 정확하고 최신 정보를 제공해준다.</p>
<h2 class="wp-block-heading">뉴 빙 코파일럿 기능까지?</h2>
<h3 class="wp-block-heading">엣지 사이드바</h3>
<p>엣지를 최선버전으로 업데이트하면 뉴빙 을</p>
<p>사이드바에서 사용할 수 있다.</p>
<p>단순 채팅 기능 뿐만 아니라 두가지 기능이 추가 되었다.</p>
<p>첫번째는 <strong>초안 작성 기능</strong>이다.</p>
<figure class="wp-block-image size-full is-resized"><a href="https://jinsbot.com/wp-content/uploads/2024/09/draft.webp"><img decoding="async" class="aligncenter size-full wp-image-897" src="https://jinsbot.com/wp-content/uploads/2024/09/draft.webp" alt="" width="734" height="317" srcset="https://jinsbot.com/wp-content/uploads/2024/09/draft.webp 734w, https://jinsbot.com/wp-content/uploads/2024/09/draft-300x130.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/draft-150x65.webp 150w" sizes="(max-width: 734px) 100vw, 734px" /></a><br />
<noscript><br />
<img loading="lazy" data-lazy-fallback="1" decoding="async" src="https://web.archive.org/web/20240529082314im_/https://jinsbot.com/wp-content/uploads/2023/03/draft.webp" alt="bing 빙 생성 ai" class="wp-image-1171" width="151" height="65" srcset="https://web.archive.org/web/20240529082314im_/https://jinsbot.com/wp-content/uploads/2023/03/draft.webp 734w, https://web.archive.org/web/20240529082314im_/https://jinsbot.com/wp-content/uploads/2023/03/draft-300x130.webp 300w, https://web.archive.org/web/20240529082314im_/https://jinsbot.com/wp-content/uploads/2023/03/draft-150x65.webp 150w" sizes="(max-width: 151px) 100vw, 151px"/><br />
</noscript></figure>
<p>작성할 주제, 톤, 포맷, 길이에 대한 지정이 가능하다.</p>
<p>기본 포맷은 일반 글, 이메일, 블로그, 개괄형 4가지가 제공된다.</p>
<p>영어로 주제를 던져주면 쓸만한 퀄리티의 글이 작성된다.</p>
<p>한글로도 잘 되지만 학습자료가 부족한만큼 퀄은 조금 떨어진다.</p>
<p>두번째 기능은 <strong>분석 및 요약</strong>이다.</p>
<p>일반 페이지의 경우 해당 사이트나 페이지의</p>
<p><strong>연관페이지, 평가 및 트래픽</strong>을 보여준다.</p>
<p>그리고 <strong>CNN, 뉴욕 타임즈, 워싱턴 포스트</strong>와 같은</p>
<p>영어권 주요 매체들은 요약 기능까지 제공한다.</p>
<p>기사를 클릭해보면 해당 기사에 대한</p>
<p><strong>요약, 연관 Q &amp;A</strong>를 표시해준다.</p>
<p>안타깝게도 한글 매체는 요약 기능을 지원하지않았다.</p>
<p>확인해보니 중앙일보, 조선일보 영문 사이트 정도에서</p>
<p>Q &amp;A 기능이 활성화되었다.</p>
<h3 class="wp-block-heading">이미지 생성 기능</h3>
<p>3월 21일 기준 빙 의 이미지 생성 기능 이</p>
<p>대중들에게<a href="https://blogs.microsoft.com/blog/2023/03/21/create-images-with-your-words-bing-image-creator-comes-to-the-new-bing/" target="_blank" rel="noreferrer noopener">공개</a>되었다.</p>
<p><a href="https://bing.com/new" target="_blank" rel="noreferrer noopener">뉴빙 신청자</a>의 경우만 사용할 수 있고</p>
<p><a href="https://www.bing.com/create" target="_blank" rel="noreferrer noopener">이 링크</a>에서 서비스를 이용할 수 있다.</p>
<p>한 때 생성 AI 붐을 일으켰던 DALL E 를</p>
<p>빙 에서도 사용할 수 있게 되었다.</p>
<p>최상단 이미지가 “Screen Headed Robot, Anime cartoon ”이라는</p>
<p>프롬프트 결과물을 살짝 수정한 것이다.</p>
<p>제공되는 그림은 <strong>JPG, 1024 x 1024px</strong>로 저장하거나 공유할 수 있다.</p>
<p>부스트 코인이 있을 때는 수초 내에 결과물이 나오고</p>
<p>없을때는 최대 45초까지 걸릴 수 있다고 한다.</p>
<p>현재는 사용자가 적어 코인이 없어도</p>
<p>10초이내에 그림이 나온다.</p>
<p>일주일에 <strong>10개의부스트</strong>코인을 제공하고</p>
<p>검색 등 다양한 행위의 리워드로 추가 코인을 받을 수 있다.</p>
<p>체험자가 늘기전에 체험해보길 추천한다.</p>
<h3 class="wp-block-heading">오피스와 코파일럿의 결합</h3>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio">
<div class="wp-block-embed__wrapper"><span class="embed-youtube" style="text-align: center; display: block;"><br />
<iframe loading="lazy" class="youtube-player" style="border: 0;" src="https://www.youtube.com/embed/S7xTBa93TX8?version=3&amp;rel=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;fs=1&amp;hl=en-US&amp;autohide=2&amp;wmode=transparent" width="1200" height="675" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation" allowfullscreen="allowfullscreen"></iframe><br />
</span></div>
</figure>
<p>위 유튜브 와 공식 <a href="https://blogs.microsoft.com/blog/2023/03/16/introducing-microsoft-365-copilot-your-copilot-for-work/" target="_blank" rel="noreferrer noopener">블로그</a>를 통해 오피스 365 에</p>
<p>차세대 생성 AI가 적용될것이라 발표 했다.</p>
<p>간단한 명령어 만으로 초안, 템플릿 등의</p>
<p>생성이 가능해 업무 효율을 크게 올려줄 것이다.</p>
<p>어느정도 까지 가능할 지 대중들의 반응이 뜨거운 가운데</p>
<p>현재 20개 고객사에서 <strong>베타 테스트</strong>중이다.</p>
<p>마이크로소프트 365 구독자에게 제공될 것으로 보인다.</p>
<p>Github처럼 코파일럿 기능에 추가적인 비용이</p>
<p>발생할 것으로 보이나 아직 확정된 것은 없다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>관련글</p>
<ul>
<li><a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a></li>
<li><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></li>
<li><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></li>
<li><a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/%eb%b9%99-new-bing-intro/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">896</post-id>	</item>
		<item>
		<title>GPT-4 뭐가 달라 졌을까?</title>
		<link>https://jinsbot.com/gpt-4-introduction/</link>
					<comments>https://jinsbot.com/gpt-4-introduction/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Wed, 15 Mar 2023 10:06:59 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[gpt-4]]></category>
		<category><![CDATA[gpt4]]></category>
		<category><![CDATA[openAI]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[vision]]></category>
		<category><![CDATA[visual]]></category>
		<category><![CDATA[한계점]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=889</guid>

					<description><![CDATA[<p>GPT-4 가 발표됐다는 소식을 듣고 간단하게 분석 글을 작성한다. 현재 GPT-4 는 유료 서비스인 ChatGPT plus 구독자에게만 제공되고 있다. 크게 달라진 점을 선요약 하자면 다음과 같다. 이미지에 대한 입력이 가능해짐 다양한 종류의 시험에서 성적이 향상됨 다양한 벤치마크에서의 성능이 향상됨 차별적이고 유해한 컨텐츠를 걸러내는 기능이 강화됨 많은 전문가들이 GPT-4의 parameter 수 는 GPT-3 / 3.5 와 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>GPT-4 가 발표됐다는 소식을 듣고</p>
<p>간단하게 분석 글을 작성한다.</p>
<p>현재 GPT-4 는 <strong>유료 서비스</strong>인 ChatGPT plus</p>
<p>구독자에게만 제공되고 있다.</p>
<p>크게 달라진 점을 선요약 하자면 다음과 같다.</p>
<ul>
<li>이미지에 대한 입력이 가능해짐</li>
<li>다양한 종류의 시험에서 성적이 향상됨</li>
<li>다양한 벤치마크에서의 성능이 향상됨</li>
<li>차별적이고 유해한 컨텐츠를 걸러내는 기능이 강화됨</li>
</ul>
<p>많은 전문가들이 GPT-4의 parameter 수 는</p>
<p>GPT-3 / 3.5 와 큰 차이 없을 것으로 본다.</p>
<p>Parameter 를 증가시켜서 얻을 수 있는 이득이</p>
<p>증가할 computational cost 에 비해 크지 않기 때문일 것이다.</p>
<p>따라서 질의 응답 성능에서는 큰 개선을 느끼기 어려운 대신</p>
<p>일부 기능이 <strong>강화</strong>되거나 <strong>추가</strong>되었다.</p>
<p>참고로 GPT-4 역시 대부분 21년 9월까지의</p>
<p>데이터들로 학습되었다.</p>
<p>그러므로 학습되지 않았을만한 내용이나</p>
<p>추론하기 어려운 내용을 묻고 실망하지 말자.</p>
<p>몇번이나 이야기하지만 GPT-4 에</p>
<p>입력되지 않은 정보에 제대로 답할 수 없다.</p>
<h2 class="wp-block-heading">GPT-4 특징 자세히 설명해봐</h2>
<h3 class="wp-block-heading"><strong>효율적인</strong>성능 예측이 가능해짐</h3>
<p>GPT-4 논문 가장 앞에 나오는 개선점 이며</p>
<p>그만큼 주요한 <strong>포커스</strong>중 하나 이다.</p>
<figure class="wp-block-image size-full is-resized"><a href="https://jinsbot.com/wp-content/uploads/2024/09/gpt4prediction.webp"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-893" src="https://jinsbot.com/wp-content/uploads/2024/09/gpt4prediction.webp" alt="" width="768" height="419" srcset="https://jinsbot.com/wp-content/uploads/2024/09/gpt4prediction.webp 768w, https://jinsbot.com/wp-content/uploads/2024/09/gpt4prediction-300x164.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/gpt4prediction-150x82.webp 150w" sizes="(max-width: 768px) 100vw, 768px" /></a><br />
<noscript><br />
<img loading="lazy" data-lazy-fallback="1" decoding="async" src="https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4.webp" alt="gpt-4 graph" class="wp-image-1142" width="576" height="314" srcset="https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4.webp 768w, https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4-300x164.webp 300w, https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4-150x82.webp 150w" sizes="(max-width: 576px) 100vw, 576px"/><br />
</noscript></figure>
<p>연구진은 위 그래프를 통해 computing cost 와 loss 사이의</p>
<p><strong>간단한 상관관계</strong>를 구할 수 있었다.</p>
<p>GPT-3~4 에 해당하는 모델들은 Computing cost 가</p>
<p>너무 크기때문에 알고리즘 평가, Fine tuning 이 효율적으로 이루어지기 어렵다.</p>
<p>반면, 이러한 상관관계를 이용한다면 Computing cost 가</p>
<p>1000~10000배 적은 모델로<strong>원본 모델의 성능을 예측</strong>할 수 있다.</p>
<p>즉, GPT-4 는 소형 모델을 이용해 같은 자원으로</p>
<p>더 많은 알고리즘 및 Fine tuning 을 평가할 수 있다.</p>
<p>이 방법을 이용했기때문에 비교적 짧은 시간 안에</p>
<p>GPT-4 가 나올 수 있었을 것이다.</p>
<p>이렇듯 향후 개선을 위해 가장 중요한 포인트 인데</p>
<p>아직까지 제대로 설명한 기사나 분석글 은 없었다.</p>
<p>참고로 openai 의 모델에 대해 보다 효율적인 벤치마킹을</p>
<p>할 수 있도록 <a href="https://github.com/openai/evals" target="_blank" rel="noreferrer noopener">evals</a>라는 프레임워크를 <strong>오픈소스</strong>로 공개했다.</p>
<p>해당 툴을 이용해 일반 사용자들도 자유롭게</p>
<p>새로운 평가 기준, 방법을 제시할 수 있다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h3 class="wp-block-heading"><strong>추론</strong>성능이 강화됨</h3>
<figure class="wp-block-image size-full"><a href="https://jinsbot.com/wp-content/uploads/2024/09/gpt4-exam.webp"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-890" src="https://jinsbot.com/wp-content/uploads/2024/09/gpt4-exam.webp" alt="" width="600" height="450" srcset="https://jinsbot.com/wp-content/uploads/2024/09/gpt4-exam.webp 600w, https://jinsbot.com/wp-content/uploads/2024/09/gpt4-exam-300x225.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/gpt4-exam-150x113.webp 150w" sizes="(max-width: 600px) 100vw, 600px" /></a><br />
<noscript><br />
<img loading="lazy" data-lazy-fallback="1" decoding="async" width="600" height="450" src="https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4-exam.webp" alt="gpt-4 exam" class="wp-image-1144" srcset="https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4-exam.webp 600w, https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4-exam-300x225.webp 300w, https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4-exam-150x113.webp 150w" sizes="(max-width: 600px) 100vw, 600px"/><br />
</noscript></figure>
<p>위 그래프에서 볼 수 있듯이 대다수의 시험에서</p>
<p>성적이 개선되었다.</p>
<p>정확히 어떤 부분이 개선되었는지는</p>
<p>다음 예제를 통해 유추할 수 있다.</p>
<figure class="wp-block-table">
<table class="has-fixed-layout">
<tbody>
<tr>
<td>GPT-3.5</td>
<td>GPT-4</td>
</tr>
<tr>
<td>질문<br />
Andrew is free from 11 am to 3 pm, Joanne is free from noon to 2 pm and then 3:30 pm to 5 pm. Hannah is available at noon for half an hour, and then 4 pm to 6 pm. What are some options for start times for a 30 minute meeting for Andrew, Hannah, and Joanne?</td>
<td><strong>동일</strong></td>
</tr>
<tr>
<td>답변<br />
Here is a list of their availability: –Andrew: 11 am to 3 pm –Joanne: noon to 2 pm, and 3:30 pm to 5 pm –Hannah: noon to 12:30 pm, and 4 pm to 6 pm Based on their availability, there is a 30-minute window where all three of them are available, which is from 4 pm to 4:30 pm. So, the meeting can be scheduled at 4 pm.</td>
<td>답변<br />
Andrew: 11 am –3 pm Joanne: 12 pm –2 pm, 3:30 pm –5 pm Hannah: 12 pm –12:30 pm, 4 pm –6 pm Common availability for a 30-minute meeting: 12 pm –12:30 pm</td>
</tr>
</tbody>
</table>
</figure>
<p>같은 질문에 대해 GPT-3.5 는 그럴듯하지만 틀린 답을</p>
<p>GPT-4 는 정확한 답을 내놓았다.</p>
<p>이 예제에서 볼 수 있듯이 GPT 모델은 실제로</p>
<p>지능이 있는 건 아니기 때문에 <strong>추론 문제에 취약</strong>했다.</p>
<p>정확한 방법은 설명 되지 않았지만 GPT-4 에서는</p>
<p>특정 유형의 추론 문제에 대해 학습이 이루어진 것으로 보인다.</p>
<p>따라서 학습된 형태의 문제에 대해서는</p>
<p>비교적 정확한 답변이 가능하다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h3 class="wp-block-heading"><strong>이미지</strong>에 대한 입력이 가능해짐</h3>
<p><em>질문) What is funny about this image? Describe it panel by panel.</em></p>
<figure class="wp-block-image size-full"><a href="https://jinsbot.com/wp-content/uploads/2024/09/gpt4_visualinput.webp"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-891" src="https://jinsbot.com/wp-content/uploads/2024/09/gpt4_visualinput.webp" alt="" width="250" height="250" srcset="https://jinsbot.com/wp-content/uploads/2024/09/gpt4_visualinput.webp 250w, https://jinsbot.com/wp-content/uploads/2024/09/gpt4_visualinput-150x150.webp 150w" sizes="(max-width: 250px) 100vw, 250px" /></a><br />
<noscript><br />
<img data-lazy-fallback="1" loading="lazy" decoding="async" width="250" height="250" src="https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4_visualinput.webp" alt="gpt-4 visualinput" class="wp-image-1149" srcset="https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4_visualinput.webp 250w, https://web.archive.org/web/20240529074421im_/https://jinsbot.com/wp-content/uploads/2023/03/gpt4_visualinput-150x150.webp 150w" sizes="(max-width: 250px) 100vw, 250px"/><br />
</noscript></figure>
<figure class="wp-block-table">
<table>
<tbody>
<tr>
<td>GPT-4 답변)<br />
<em><br />
The image shows a package for a “Lightning Cable ”adapter with three panels.<br />
Panel 1: A smartphone with a VGA connector (a large, blue, 15-pin connector typically used for computer monitors) plugged into its charging port.<br />
Panel 2: The package for the “Lightning Cable ”adapter with a picture of<br />
a VGA connector on it.<br />
Panel 3: A close-up of the VGA connector with a small Lightning connector (used for charging iPhones and other Apple devices) at the end.<br />
The humor in this image comes from the absurdity of plugging a large,<br />
outdated VGA connector into a small, modern smartphone charging port.<br />
</em></td>
</tr>
</tbody>
</table>
</figure>
<p>VGA 커넥터의 외관을 사용한 라이트닝 케이블 사진을</p>
<p>어느정도 이해하고 설명했다.</p>
<p>이외에도 간단한 문제의 diagram 이나</p>
<p>카툰 에 대한 분석, 답변이 가능하다.</p>
<p>이와 같이 GPT-4는 사진 상 물체의<strong>classification &amp;location</strong>이</p>
<p>가능하고 이를 통해 상황을 추론할 수 있다.</p>
<p>물론, 이번에 도입되는 기능인 만큼 일부 데이터셋 에서는</p>
<p>현재 최고 기술 보다 성능이 떨어진다.</p>
<p>8개의 데이터셋에 대해 accuracy가 평균적으로 68%에서 76%로 향상되었으나</p>
<p>2개의 데이터 셋에서는 7% 가량 하락하였다.</p>
<p>다양하게 활용할 수 있겠지만</p>
<p>선공개된 기능에는 포함되지 않았다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h3 class="wp-block-heading">이외의 소소한 개선</h3>
<p>입력가능한 토큰이 <strong>최대 8k개</strong>로 증대 되었고</p>
<p>별도 모델을 사용할 경우 <strong>최대 32k개</strong>(단어 25k개)까지 가능하다.</p>
<p>예전보다 긴 문서의 번역이나 요약에 활용할 수 있다.</p>
<p>보다 세세한 역할 부여가 가능해졌다.</p>
<p>예제에서는 답을 직접적으로 알려주지 않는튜터,</p>
<p>셰익스피어처럼 말하는 해적 등을 보여주었다.</p>
<p>마지막으로 <strong>필터링 우회</strong>를 방지하기 위한 기술이 추가되었다.</p>
<p>상당 수 막은것으로 보이나 아직 완벽하지는 않다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h2 class="wp-block-heading">그럼 GPT-4 의 한계점은 뭐야?</h2>
<p>거짓 답변을 내놓는 <strong>Hallucination</strong>에 대한 성능이</p>
<p>개선되었지만 아직 완전히 잡지는 못했다고 한다.</p>
<p><span style="font-size: revert;">참고로 GPT-4 역시 대부분 21년 9월까지의</span></p>
<p>이야기도 있다.</p>
<p>참고로 GPT-4 역시 대부분 21년 9월까지의</p>
<p id="block-e97d11a0-efe5-42a0-a0f9-37b70feeb563">데이터들로 학습되었다.</p>
<p id="block-e4f51a0d-c831-4280-a979-c6b57896603c">그러므로 학습되지 않았을 내용이나 추론하기 어려운 내용을 물으면</p>
<p id="block-e4f51a0d-c831-4280-a979-c6b57896603c">당연히 이상한 답변이 나온다.</p>
<p id="block-8e261895-44c0-4f5e-ad07-57d94aaf8871">GPT-4 의 성능이 안좋거나 한계점 이 아니라</p>
<p>그냥 사용자가 이상한 질문을 한것이다.</p>
<p>참고로 <strong>다국어 입력</strong>에 대한 성능도 강화되었지만</p>
<p>성능차이는 여전하기때문에 가능하면 영어로 질문하라.</p>
<p>유해하거나 차별적, 공격적인 컨텐츠에 대한</p>
<p>필터링이 강화되었으나 문제는 그 과정에 있다.</p>
<p><a href="https://time.com/6247678/openai-chatgpt-kenya-workers/" target="_blank" rel="noreferrer noopener">타임지</a>에 따르면 해당 작업은 <strong>케냐의 노동자</strong>들에게</p>
<p>아웃소싱되었고 <strong>2$의 시급</strong>이 지불되었다.</p>
<p>케냐의 평균 임금과 비교했을 때 시급이 높은 편이지만</p>
<p>업무강도 및 정신적 고통이 상당했다고 한다.</p>
<p>기존에는 텍스트만 판별했다면 2월부터는 <strong>유해 이미지</strong>까지</p>
<p>판별하게 만들어 고통이 가중되었다.</p>
<p>결국, openAI 는 해당 아웃 소싱업체와의</p>
<p>계약을 예정보다 일찍 끝마쳤다.</p>
<p>최근 다양한 분야에서 공정 무역 에 대한 관심이</p>
<p>커진 만큼 이에 대한 대책이 필요하다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h2 class="wp-block-heading">GPT-4 API 는 언제 나와?</h2>
<p>python api 는 아직 공개되지 않았고</p>
<p>대신 <a href="https://openai.com/waitlist/gpt-4-api" target="_blank" rel="noreferrer noopener">알림메일</a>을 발송해준다고 하니 등록하자.</p>
<figure class="wp-block-table">
<table>
<tbody>
<tr>
<td>모델 종류</td>
<td>프롬프트(질문)</td>
<td>답변</td>
</tr>
<tr>
<td>8k</td>
<td>0.03$/1k token</td>
<td>0.06$/1k token</td>
</tr>
<tr>
<td>32k</td>
<td>0.06$/1k token</td>
<td>0.12$/1k token</td>
</tr>
</tbody>
</table>
</figure>
<p>기본 모델도 가격이 비싸지만 32k 모델은 그것보다 <strong>2배</strong>비싸다.</p>
<p>참고로 gpt-3.5-turbo 는 1k 토큰당 0.002$</p>
<p>gpt-3.5 ( 다빈치 )는 0.02$이었다.</p>
<p>그리고 기본적으로 <strong>분당 토큰 40k개 &amp;요청 200개</strong>의 리밋이 걸려있다.</p>
<p>마지막으로 개발자의 라이브스 데모를 첨부하며 글을 마친다.</p>
<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio">
<div class="wp-block-embed__wrapper"><span class="embed-youtube" style="text-align: center; display: block;"><br />
<iframe loading="lazy" class="youtube-player" style="border: 0;" src="https://www.youtube.com/embed/outcGtbnMuQ?version=3&amp;rel=1&amp;showsearch=0&amp;showinfo=1&amp;iv_load_policy=1&amp;fs=1&amp;hl=en-US&amp;autohide=2&amp;wmode=transparent" width="1200" height="675" sandbox="allow-scripts allow-same-origin allow-popups allow-presentation" allowfullscreen="allowfullscreen"></iframe><br />
</span></div>
</figure>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>관련글</p>
<ul>
<li><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></li>
<li><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></li>
<li><a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a></li>
<li><a href="https://jinsbot.com/gpt-3-5-python/">GPT-3.5 python에서 사용하기</a></li>
<li><a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/gpt-4-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">889</post-id>	</item>
		<item>
		<title>chat GPT 하이브리드 앱 만들기 C# python</title>
		<link>https://jinsbot.com/chat-gpt-hybrid-python/</link>
					<comments>https://jinsbot.com/chat-gpt-hybrid-python/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Mon, 13 Mar 2023 09:55:39 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[chat gpt]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[Turbo]]></category>
		<category><![CDATA[닷넷]]></category>
		<category><![CDATA[하이브리드]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=885</guid>

					<description><![CDATA[<p>이전글에서 chat GPT python API 에 대해 설명했다. 한두번 사용하기엔 상관없지만 매번 python 파일을 수정하는 건 번거롭고 바람직하지 않다. 간단하게 터미널에서 입력을 받아도 되지만 자유도, 활용도를 높이기 위해 GUI 를 구축해보자. GUI 글에서 언급 했던 것처럼 웹앱을 만들어도 되지만 이번에는 데스크탑 앱을 만들어 보겠다. 그리고 보통 많이 사용되는 tkinter 나 PyQt 가 아니라 C# ( [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://jinsbot.com/gpt3-5-turbo/" target="_blank" rel="noreferrer noopener">이전글</a>에서 chat GPT python API 에 대해 설명했다.</p>
<p>한두번 사용하기엔 상관없지만</p>
<p>매번 python 파일을 수정하는 건 번거롭고 바람직하지 않다.</p>
<p>간단하게 터미널에서 입력을 받아도 되지만</p>
<p>자유도, 활용도를 높이기 위해 GUI 를 구축해보자.</p>
<p><a href="https://jinsbot.com/gui-library-python/" target="_blank" rel="noreferrer noopener">GUI 글</a>에서 언급 했던 것처럼 웹앱을 만들어도 되지만</p>
<p>이번에는 데스크탑 앱을 만들어 보겠다.</p>
<p>그리고 보통 많이 사용되는 tkinter 나 PyQt 가 아니라</p>
<p>C# ( 닷넷 ) 을 활용해보자.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h3 class="wp-block-heading">Python 으로 C#앱을 만든다고?</h3>
<p>pythonnet 패키지를 이용하면</p>
<p>파이썬 에서 C# 코드를 간단하게 사용할 수 있다.</p>
<p>하지만 Windows Forms 까지 사용해본 사람은 드물 것이다.</p>
<p>다음에 해당하는 사람에게 이 가이드를 추천한다.</p>
<ul>
<li>Visual Studio (닷넷) 를 써보았다.</li>
<li>C# 앱을 개발해봤다.</li>
<li>tkinter 보다 복잡한 레이아웃을 만들고 싶다.</li>
<li>바이너리 크기를 최소화 하고 싶다.</li>
</ul>
<p>이 방식은 기본적으로 닷넷 프레임워크를 사용하기때문에</p>
<p>바이너리 크기가 작은 장점이 있다.</p>
<p>기본적으로 간단한 UI는 CLI 환경에서</p>
<p>개발하는걸 추천한다.</p>
<p>만약 복잡한 UI를 개발할 거라면 <strong>Visual Studio</strong>로</p>
<p>UI 코드를 만든 후 포팅하길 바란다.</p>
<h2 class="wp-block-heading">Chat GPT 앱 코드</h2>
<p>설치 되어야 하는 필수 패키지는 다음과 같다.</p>
<ul>
<li>pythonnet</li>
</ul>
<p>c함수 사용을 위한 ctypes 는 표준 함수라</p>
<p>설치 안해도 되지만 pythonnet ( c# ) 은 별도로 설치해야한다.</p>
<p>UI를 정의하는코드와 실행 코드를 나누었다.</p>
<p>우선 UI 코드를 설명하겠다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#myform.py
import clr
clr.AddReference("System.Windows.Forms")
clr.AddReference('System.Drawing')
clr.AddReference('System')
from System.Windows.Forms import *
from System.Drawing import *

from concurrent.futures import ThreadPoolExecutor
import requests

# chatGPT
URL = "https://api.openai.com/v1/chat/completions"
headers = {"Authorization": "Bearer 발급받은API키",
           "Content-Type": "application/json"}


def task(form):
    if form.query != '':
        messages = [{"role": "system", "content": "You are a helpful assistant."}]
        if form.assist != '':
            messages.append({"role": "assistant", "content": form.assist})
            form.log.write(f'Assist:{form.assist}\n')
        messages.append({"role": "user", "content": form.query})
        Data = {"model": "gpt-3.5-turbo", "messages": messages, "temperature": form.temp,
                "max_tokens": form.max_token}
        res = requests.post(URL, headers=headers, json=Data)
        form.answer = res.json()['choices'][0]['message']['content']

        form.log.write('Q:' + form.query + "\n")
        form.log.write('A:')
        form.log.writelines(form.answer + "\n")
        form.log.write("\n")
        form.abox.Text = form.answer
        print('result arrived')
    else:
        MessagBox.Show("Query is empty")


class MyForm(Form):
    def __init__(self, temp, max_token, lq, la, log):
        self.log = log
        self.temp = temp
        self.max_token = max_token
        self.lq = lq
        self.la = la
        self.exe = ThreadPoolExecutor(max_workers=2)
        super().__init__()
        c_w = 1000
        c_h = 1000

        self.ClientSize = Size(c_w, c_h)

        self.pn = TableLayoutPanel()
        self.pn.RowCount = 3
        self.pn.ColumnCount = 1
        self.pn.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 100.0))
        self.pn.RowStyles.Add(RowStyle(SizeType.Percent, 10.0))
        self.pn.RowStyles.Add(RowStyle(SizeType.Percent, 20.0))
        self.pn.RowStyles.Add(RowStyle(SizeType.Percent, 70.0))
        self.pn.Dock = DockStyle.Fill

        self.pn1 = TableLayoutPanel()
        self.pn1.RowCount = 2
        self.pn1.ColumnCount = 2
        self.pn1.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 50.0))
        self.pn1.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 50.0))
        self.pn1.RowStyles.Add(RowStyle(SizeType.Percent, 20.0))
        self.pn1.RowStyles.Add(RowStyle(SizeType.Percent, 80.0))
        self.pn1.Dock = DockStyle.Fill

        self.pn2 = TableLayoutPanel()
        self.pn2.RowCount = 2
        self.pn2.ColumnCount = 3
        b_width = 7.5
        self.pn2.ColumnStyles.Add(ColumnStyle(SizeType.Percent, b_width))
        self.pn2.ColumnStyles.Add(ColumnStyle(SizeType.Percent, 100 - 2 * b_width))
        self.pn2.ColumnStyles.Add(ColumnStyle(SizeType.Percent, b_width))
        self.pn2.RowStyles.Add(RowStyle(SizeType.Percent, 50.0))
        self.pn2.RowStyles.Add(RowStyle(SizeType.Percent, 50.0))
        self.pn2.Dock = DockStyle.Fill

        self.lbl = Label()
        self.lbl.Text = f'Temperature={temp}'
        self.lbl.TextAlign = ContentAlignment.MiddleCenter
        self.lbl.Dock = DockStyle.Fill
        self.lbl2 = Label()
        self.lbl2.Text = f'Max token={max_token}'
        self.lbl2.TextAlign = ContentAlignment.MiddleCenter
        self.lbl2.Dock = DockStyle.Fill
        self.trb = TrackBar()
        self.trb.Dock = DockStyle.Fill
        self.trb.Maximum = 20
        self.trb.Minimum = 0
        self.trb.TickFrequency = 1
        self.trb.LargeChange = 2
        self.trb.SmallChange = 1
        self.trb.Value = int(temp * 10)
        self.trb.Scroll += self.temp_moved
        self.trb2 = TrackBar()
        self.trb2.Dock = DockStyle.Fill
        self.trb2.Maximum = 1000
        self.trb2.Minimum = 0
        self.trb2.TickFrequency = 100
        self.trb2.LargeChange = 200
        self.trb2.SmallChange = 100
        self.trb2.Value = max_token
        self.trb2.Scroll += self.token_moved

        self.lbl3 = Label()
        self.lbl3.Text = 'Assitant:'
        self.lbl3.TextAlign = ContentAlignment.MiddleCenter
        self.lbl3.Dock = DockStyle.Fill
        self.txtbox = TextBox()
        self.txtbox.Dock = DockStyle.Fill
        self.txtbox.Multiline = True
        self.txtbox.Text = la

        self.lbl3_2 = Label()
        self.lbl3_2.Text = 'Query:'
        self.lbl3_2.TextAlign = ContentAlignment.MiddleCenter
        self.lbl3_2.Dock = DockStyle.Fill

        self.txtbox_2 = TextBox()
        self.txtbox_2.Dock = DockStyle.Fill
        self.txtbox_2.Multiline = True
        self.txtbox_2.Text = lq
        self.button1 = Button()
        self.button1.Text = "Clear"
        self.button1.ForeColor = Color.Black
        self.button1.Dock = DockStyle.Fill
        self.button1.Click += self.clear_clicked
        self.button2 = Button()
        self.button2.Text = "Send"
        self.button2.ForeColor = Color.Black
        self.button2.Dock = DockStyle.Fill
        self.button2.Click += self.send_clicked

        self.abox = TextBox()
        self.abox.Dock = DockStyle.Fill
        self.abox.Multiline = True
        self.Controls.Add(self.pn)
        self.pn1.Controls.Add(self.lbl, 0, 0)
        self.pn1.Controls.Add(self.lbl2, 1, 0)
        self.pn1.Controls.Add(self.trb, 0, 1)
        self.pn1.Controls.Add(self.trb2, 1, 1)

        self.pn2.Controls.Add(self.lbl3, 0, 0)
        self.pn2.Controls.Add(self.txtbox, 1, 0)
        self.pn2.Controls.Add(self.button1, 2, 0)
        self.pn2.Controls.Add(self.lbl3_2, 0, 1)
        self.pn2.Controls.Add(self.txtbox_2, 1, 1)
        self.pn2.Controls.Add(self.button2, 2, 1)

        self.pn.Controls.Add(self.pn1, 0, 0)
        self.pn.Controls.Add(self.pn2, 0, 1)
        self.pn.Controls.Add(self.abox, 0, 2)

    def run(self):
        Application.Run(self)

    def send_clicked(self, sender, args):
        self.assist = self.txtbox.Text
        self.query = self.txtbox_2.Text

        self.exe.submit(task, self)

    def clear_clicked(self, sender, args):
        self.txtbox.Clear()
        self.txtbox_2.Clear()
        print('Cleared')

    def temp_moved(self, sender, args):
        self.temp = self.trb.Value / 10.0
        self.lbl.Text = f'Temperature={self.temp}'

    def token_moved(self, sender, args):
        self.max_token = int(self.trb2.Value)
        self.lbl2.Text = f'Max Token={self.max_token}'
</pre>
<p>task 함수에서 쿼리 요청 및 수신을 처리하고</p>
<p>수신된 결과를 로그에 기록한다.</p>
<p>사용되는 메세지의 구조 는 <a href="https://jinsbot.com/gpt3-5-turbo/" target="_blank" rel="noreferrer noopener">이전글</a>을 참고하라.</p>
<p>ThreadpoolExecutor ( 멀티 스레드 ) 를 사용해</p>
<p>task 함수는 UI 와 별도 스레드에서 실행 된다.</p>
<p>Async 로도 짜보았지만 수신에 시간이 걸릴 경우</p>
<p>UI 스레드가 freeze 된다.</p>
<p>Qthread 처럼 System.Threading 의</p>
<p><a href="https://github.com/pythonnet/pythonnet/blob/master/demo/DynamicGrid.py" target="_blank" rel="noreferrer noopener">Thread</a>함수를 사용해도 된다.</p>
<p>init 함수에서 UI 요소를 설정하는 건</p>
<p>C# 과 동일하며 코드도 거의 일치 한다.</p>
<p>TableLayoutPanel 을 이용해 레이아웃을 만들었고</p>
<p>TrackBar , Label , Button , TextBox 를 사용했다.</p>
<p>각 함수의 초기화 코드 및 사용법은 인터넷에</p>
<p>잘 나오니 따로 설명하지 않겠다.</p>
<p>버튼, 트랙바에 사용되는 callback 함수도</p>
<p>코드에 나온대로 매우 간단하게 짤 수 있다.</p>
<p>실행 코드는 더욱 더 간단하다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">#Only for python embed
import sys
sys.path.append('.')

import csv
from myform import MyForm

log=open('log.txt','a+')
try:
    f=open('cfg.csv','r')
    r=csv.DictReader(f,delimiter=';')
    cfg=dict(r.__next__())
    f.close()
    temp=float(cfg['Temperature'])
    max_token=int(cfg['MaxToken'])
    lq=cfg['LastQuery']
    la=cfg['LastAssist']
except:
    temp=0.1
    max_token=100
    lq=''
    la=''
a=MyForm(temp,max_token,lq,la,log)
a.run()
a.Dispose()
if hasattr(a,'query'):
    with open('cfg.csv','w') as f:
        wr=csv.DictWriter(f,fieldnames=["Temperature","MaxToken","LastQuery","LastAssist"],delimiter=';')
        wr.writeheader()
        wr.writerow({"Temperature":a.temp,"MaxToken":a.max_token,"LastQuery":a.query,"LastAssist":a.assist})
log.close()
print('')
</pre>
<p>path.append는 embeddable python 에만 필요하다.</p>
<p>그리고 필수적인 요소는 아니지만 참고를 위해</p>
<p>cfg.csv에 마지막으로 사용한 쿼리를 저장한다.</p>
<p>Assistant에 입력할 내용은 사전정보나</p>
<p>chat GPT 의 이전 답변이며 비워두어도 된다.</p>
<p>Query 에 질문을 적으면 된다.</p>
<p>로그 파일에 쿼리 들 과 답변을 기록한다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<p>이정도면 chat GPT 의 GUI 하이브리드 앱</p>
<p>코드에 대한 충분한 설명이 되었으리라 본다.</p>
<p>이 앱 은 openai 에 로그인 하기 귀찮은 사람이나</p>
<p>차단된 곳에서 활용하기 유용할 것이다.</p>
<p>30분만에 대충 짠 코드이니 UI, 성능에 대한</p>
<p>최적화는 직접 해보길 바란다.</p>
<p>(23.08.17 update)</p>
<p>Textbox에서는 \n 대신 \r\n을 사용해야한다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>이전글</p>
<ul>
<li><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></li>
<li><a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a></li>
<li><a href="https://jinsbot.com/gpt-3-5-python/">GPT-3.5 python에서 사용하기</a>( Temperature 에 대한 설명)</li>
<li><a href="https://jinsbot.com/gui-library-python/">GUI 라이브러리 소개 python</a></li>
<li><a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a></li>
<li><a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/chat-gpt-hybrid-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">885</post-id>	</item>
		<item>
		<title>GUI 라이브러리 소개 python</title>
		<link>https://jinsbot.com/gui-library-python/</link>
					<comments>https://jinsbot.com/gui-library-python/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Mon, 06 Mar 2023 09:47:56 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[bokeh]]></category>
		<category><![CDATA[dash]]></category>
		<category><![CDATA[GUI]]></category>
		<category><![CDATA[pyqt]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[Qt]]></category>
		<category><![CDATA[streamlit]]></category>
		<category><![CDATA[tkinter]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=879</guid>

					<description><![CDATA[<p>Python 에서 사용가능한 GUI 라이브러리 들을 몇가지 소개하겠다. 순수 GUI 라이브러리 PyQt, PySide QT는 본래 C++ 환경에서 사용가능하게 만들어진 프레임워크이다. Qt Designer를 통해 Visual studio 처럼 GUI환경에서 UI를 만들 수 있는게 특징이다. 리눅스, 윈도우 등 크로스 플랫폼으로 사용할 수 있고 python, ruby 등의 언어와 붙일 수 있다는게 장점이다. 이중 python bindg인PyQt는 python에서 가장 대중적인 GUI [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/gui-library-python/">GUI 라이브러리 소개 python</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Python 에서 사용가능한 GUI 라이브러리 들을 몇가지 소개하겠다.</p>
<h3 class="wp-block-heading">순수 GUI 라이브러리</h3>
<ul>
<li>PyQt, PySide</li>
</ul>
<p>QT는 본래 C++ 환경에서 사용가능하게 만들어진 프레임워크이다.</p>
<p><strong>Qt Designer</strong>를 통해 Visual studio 처럼 GUI환경에서 UI를 만들 수 있는게 특징이다.</p>
<p>리눅스, 윈도우 등 크로스 플랫폼으로 사용할 수 있고</p>
<p>python, ruby 등의 언어와 붙일 수 있다는게 장점이다.</p>
<p>이중 python bindg인<strong>PyQt</strong>는 python에서</p>
<p>가장 대중적인 GUI 라이브러리 중 하나이다.</p>
<p>따라서 예제가 풍부하고 사용도 간편한 장점이 있지만</p>
<p>GPL 에 의해 배포시 소스코드를 공개해야하며 싫다면</p>
<p>상업용 라이센스를 구매,구독해야한다.</p>
<p>이에 반하여 Qt의 원저작자가 LGPL로 만든것이 <strong>PySide</strong>이다.</p>
<p>자세한 내용은 <a href="https://namu.wiki/w/Qt(%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC)#s-10.1" target="_blank" rel="noreferrer noopener">꺼무위키</a>를 참고하길 바란다.</p>
<p>그러므로 배포할 계획이 있다면 제약이 적은  <strong>PySide</strong>를 사용하는게 바람직하다.</p>
<p>참고로 두 라이브러리는 사용법이 거의 같지만 관리하는 주체가 다르다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<ul>
<li>Tkinter</li>
</ul>
<p>Tkinter 는 PyQT 와 함께 가장 많이 사용되는</p>
<p>GUI 라이브러리 중 하나이다.</p>
<p>Python 표준 라이브러리 에 해당하기때문에</p>
<p>Windows에서는 Python 설치시 같이 설치된다.</p>
<p>리눅스와, 윈도우, 맥 에서 사용가능하며   QT에 비해 저용량, 저사양이다.</p>
<p>실행파일의 크기도 작고 실행속도도 빠르기때문에</p>
<p>간단한 python 앱을 만들 때 자주 사용된다.</p>
<p>그러나 CLI 환경에서 디자인 해야하고 투박하며 기본 tkinter 의 편의성이 떨어진다.</p>
<p>예를 들어 표의 기능을 사용하고 싶다면 tksheet이라는</p>
<p>애드온 라이브러리를 설치해야 한다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<p>이외에도 wxPython, Kivy 등의 라이브러리가 많이 사용된다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<h3 class="wp-block-heading">요즘 대세 = 웹앱</h3>
<p>최근에는 위와 같은 전통적인 GUI 라이브러리보다</p>
<p>대시보드 형태의 웹앱 라이브러리가 각광 받고 있다.</p>
<ul>
<li>Dash</li>
</ul>
<p>Dash는 flask, Plotly, React 등을 활용해 만들어진 GUI 라이브러리다.</p>
<p>잘 꾸밀 경우 상당히 유려하고 다양한 기능을 제공하며</p>
<p>SPA(Single Page Application) 라이브러리  중 가장 인지도가 높다.</p>
<p>그런 만큼 예제도 풍부하고 문서화도 잘 되어있다.</p>
<p>다만 Tkinter 처럼 CLI환경에서 디자인을 해야하고</p>
<p>HTML에 대한 지식이 약간 필요한게 단점이다.</p>
<p>또, 구성 요소가 많아질 경우 예쁘게 배치하는게 까다롭거나 번거롭다.</p>
<p>그래도 속도 하나만큼은 후술할 라이브러리에 비해서 빠르기때문에</p>
<p>대량의 데이터를 plot 하거나 Rendering 할 때 유리하다.</p>
<p>정적인 이미지 파일로도 export 가능하지만 Jupyterlab, 웹앱 등으로</p>
<p>interactive graph 를 그릴 때 가장 빛을 발한다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<ul>
<li>Streamlit</li>
</ul>
<p>Dash와 비슷한 친구인데 사용법이 좀 더 간편하다.</p>
<p>사용자도 계속 늘어 Dashboard 계열 GUI 라이브러리 중</p>
<p>가장 관심받는 신성이다.</p>
<p>Dash보다 좀 더 간단한 그래프, 표를 나타나는데 적합하며</p>
<p>HTML에 대해 잘 몰라도 상관없다.</p>
<p>다만 설치 시 많은 의존성을 가지기 때문에 배포시 문제가 될 수 있다.</p>
<p>그리고 streamlit 앱 (streamlit.cli) 을 통해 실행되기때문에</p>
<p>이에 대한 설정, 디버깅이 번거롭다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<ul>
<li>Bokeh</li>
</ul>
<p>Dash 와 유사한 라이브러리로 Panel, Dask 등을 이용해</p>
<p>다양한 기능을 제공한다.</p>
<p>기본 레이아웃들이 Dash에 비해 유려하지만</p>
<p>특색있고 예쁘게 customize 하기는 어렵다.</p>
<p>반면 Dash는 html 과 React 를 이용해 만들어졌기때문에</p>
<p>전문가가 붙으면 빠르고 쉽게 꾸밀 수 있다.</p>
<p>Bokeh는 Jupyterlab에 좀더 특화되었고 Dash는 웹앱에</p>
<p>좀 더 장점을 가진다.</p>
<p>수만개 이상의 데이터를 plot할 때는 Dash보다 상당히 느리다.</p>
<div class="wp-block-spacer" style="height: 10px;" aria-hidden="true"></div>
<p>현재의 github stars , 다운로드는 <a href="https://plotly.com/compare-dash-shiny-streamlit-bokeh/" target="_blank" rel="noreferrer noopener">링크</a>를 참고하라.</p>
<p>다음에는 Dash 를 이용한 GUI 구축에 대해 적겠다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>python 관련글</p>
<ul>
<li><a href="https://jinsbot.com/%ec%a3%bc%ea%b0%80-%ec%98%88%ec%b8%a1-%eb%82%98%ec%8a%a4%eb%8b%a5/">30분만에 나스닥 기업 주가 예측</a></li>
<li><a href="https://jinsbot.com/gpt-3-5-python/">GPT-3.5 python에서 사용하기</a></li>
<li><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></li>
<li><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/gui-library-python/">GUI 라이브러리 소개 python</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/gui-library-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">879</post-id>	</item>
		<item>
		<title>GPT3.5 Turbo – ChatGPT python API 소개</title>
		<link>https://jinsbot.com/gpt3-5-turbo/</link>
					<comments>https://jinsbot.com/gpt3-5-turbo/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Thu, 02 Mar 2023 09:38:48 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[GPT3.5]]></category>
		<category><![CDATA[meta]]></category>
		<category><![CDATA[openAI]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[Turbo]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=877</guid>

					<description><![CDATA[<p>이전글에서 GPT3.5 모델의 python 사용법에 대해 소개했다. 그리고 ChatGPT 의 모델인 GPT3.5 Turbo 가 드디어 공개되었다. 이에 따라 변경된 python 사용법, 특징에 대해 소개하겠다. GPT3.5 Turbo python 코드 openai 패키지를 설치하거나 업데이트 후에 다음과 같이 사용한다. import openai openai.api_key ="발급받은 API키" completion = openai.ChatCompletion.create( model="gpt-3.5-turbo", messages=[{"role": "user", "content": "Tell the world about the ChatGPT API [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><a href="https://jinsbot.com/gpt-3-5-python/" target="_blank" rel="noreferrer noopener">이전글</a>에서 GPT3.5 모델의 python 사용법에 대해 소개했다.</p>
<p>그리고 ChatGPT 의 모델인 GPT3.5 Turbo 가 드디어 <a href="https://openai.com/blog/introducing-chatgpt-and-whisper-apis" target="_blank" rel="noreferrer noopener">공개</a>되었다.</p>
<p>이에 따라 변경된 python 사용법, 특징에 대해 소개하겠다.</p>
<h2 class="wp-block-heading">GPT3.5 Turbo python 코드</h2>
<p>openai 패키지를 설치하거나 업데이트 후에</p>
<p>다음과 같이 사용한다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import openai
openai.api_key ="발급받은 API키"
completion = openai.ChatCompletion.create(
  model="gpt-3.5-turbo", 
  messages=[{"role": "user", "content": "Tell the world about the ChatGPT API in the style of a pirate."}]
)
print(completion)</pre>
<p>기존 Completion 에서 ChatCompletion 으로 바뀌었고</p>
<p>model이 gpt-3.5-turbo 로 바뀌었다.</p>
<p>마지막으로 prompt 가 messages로 바뀌었고</p>
<p>role이라는 인자가 추가되었다.</p>
<p>자세한 내용은 custom API 로 추가 설명하겠다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import requests
import json
headers={"Authorization":"Bearer 발급키","Content-Type":"application/json"}
link="https://api.openai.com/v1/chat/completions"
messages=[        {"role": "system", "content": "You are a helpful assistant."},
        {"role": "user", "content": "Who won the world series in 2020?"},
        {"role": "assistant", "content": "The Los Angeles Dodgers won the World Series in 2020."},
        {"role": "user", "content": "Where was it played?"}]
data={"model": "gpt-3.5-turbo", "messages": messages, "temperature": 0.2, "max_tokens": 300}
res=requests.post(link,data=json.dumps(data),headers=headers)
print(res.json()['choices'][0]['message'])</pre>
<p>위 예제에서 볼 수 있듯이 이제 message를 복수개 보낼 수 있다.</p>
<p>system을 통해 GPT의 역할을 지정하는 것이고</p>
<p>user 는 사용자의 입력을 나타낸다.</p>
<p>마지막으로 assistant 는 이전 대답 혹은 사전 정보 를 의미한다.</p>
<p>나머지 parameter 는 이전과 동일하니 <a href="https://jinsbot.com/gpt-3-5-python/" target="_blank" rel="noreferrer noopener">이전글 </a>혹은</p>
<p><a href="https://platform.openai.com/docs/api-reference/chat/create" target="_blank" rel="noreferrer noopener">링크</a>를 확인하길 바란다.</p>
<h2 class="wp-block-heading">GPT3.5 용도</h2>
<p>openai 에서는 <a href="https://platform.openai.com/docs/guides/chat" target="_blank" rel="noreferrer noopener">가이드</a>를 통해 다음과 같은 사용을 추천하고 있다.</p>
<ul>
<li>이메일 이나 문서의 초안 작성</li>
<li>파이썬 코드 작성</li>
<li>문서에 담긴 정보에 대해 질의 응답</li>
<li>챗봇 생성</li>
<li>소프트웨어 자연어 인터페이스 추가</li>
<li>다양한 주제에 대한 tutor</li>
<li>번역</li>
<li>Simulate characters for video games and much more</li>
</ul>
<p>번역에 대해서는 다음과 같이 message를 작성하면 된다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">text='텍스트'
messages=[{"role": "user", "content": f'Translate the following English text to Korean: {text}'}]</pre>
<h2 class="wp-block-heading">이전 모델과 차이가 뭐야?</h2>
<p>가격이 1/10 수준으로 <strong>저렴해졌다.</strong></p>
<p>기존 GPT3.5 모델은 1000토큰 당 0.02$이었지만</p>
<p>GPT3.5 Turbo는 1000토큰 당 0.002$이다.</p>
<p>그리고 추가 학습 ( fine tuning ) 에 대한</p>
<p>API는 아직 공개되지 않았다. ( 23.03.01 기준)</p>
<p>따라서 <strong>커스텀 모델</strong>이 필요한 경우에는</p>
<p>기존 모델을 사용해야 한다.</p>
<p>그리고 GPT3.5 Turbo 에 입력된 데이터는</p>
<p>30일간 저장된다고 명시 되었다.</p>
<p>데이터 사용에 대한 정책은 다음 <a href="https://platform.openai.com/docs/data-usage-policies" target="_blank" rel="noreferrer noopener">링크</a>를 참조하라.</p>
<p>개인 정보를 입력했을 경우 삭제 요청을 할 수 있다.</p>
<p>또, 차별 및 성희롱에 대한 판단 기능을</p>
<p>추가적으로 사용할 수 있으니 다음 <a href="https://platform.openai.com/docs/data-usage-policies" target="_blank" rel="noreferrer noopener">가이드</a>를 참고하라.</p>
<p>이외에도 음성 텍스트 변환 및 번역 모델인</p>
<p>Whisper 모델이 개선되었다.</p>
<p>개선 모델의 사용료는 분당 0.006$로 굉장히 저렴하고</p>
<p>다양한 언어와 포맷을 지원한다.</p>
<p>자세한 내용은 다음 <a href="https://platform.openai.com/docs/guides/speech-to-text" target="_blank" rel="noreferrer noopener">링크</a>에서 확인할 수 있다.</p>
<h2 class="wp-block-heading">GPT3.5 의 경쟁자는?</h2>
<p><a href="https://jinsbot.com/chatgpt-alternative/" target="_blank" rel="noreferrer noopener">다른 글</a>에서 meta ( facebook ) 의 OPT 모델에 대한 이야기를 했다.</p>
<p>meta 에서도 최근 새로운 모델인 LLaMA 를 제시했다.</p>
<p>가장 큰 모델이 65B 라 실망할 수도 있지만</p>
<p>학습 방법의 개선으로 성능은 이전 모델보다 뛰어나다고 한다.</p>
<p><a href="https://arxiv.org/abs/2302.13971" target="_blank" rel="noreferrer noopener">논문</a>에 따르면 GPT3 (구모델) 보다 나은 성능을 보인다.</p>
<p>성능 대비 요구 Parameter 가 줄었기 때문에 일부 모델은</p>
<p>3090, 3090S로 구동할 수 있을 것이다.</p>
<p>예를 들어 7B 모델은 max_batch_size를 1로 조정하면</p>
<p>16G VRAM으로 구동 가능하다.</p>
<p>fp8로 정밀도를 희생한다면 13B모델까지</p>
<p>3090에서 구동 가능할 것으로 예상된다.</p>
<p>참고로 LLaMa 의 상업적 사용은 별도의 협의가 필요하다.</p>
<p>아직 GPT3.5 수준에 이르지는 못했지만 둘의 경쟁으로</p>
<p>더 저렴하고 좋은 서비스가 나올 수 있을 것이다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity" />
<p>(23.03.06 updated)</p>
<p>흥미롭게도 LLaMa의 모델이 인터넷상에 유출되었다.</p>
<p>원래도 학술 목적으로는 어렵지 않게 받을 수 있었지만</p>
<p>일반인에게까지 오픈되어 사람들이 열심히 연구중이다.</p>
<p>흥미롭게도 누군가 LLaMa github 에 토렌트 ( 마그넷 ) 주소를</p>
<p>업로드 했으며 Meta에서도 딱히 삭제하지 않고 있다. (<a href="https://github.com/facebookresearch/llama/pull/73/files" target="_blank" rel="noreferrer noopener">링크</a>)</p>
<p>외국 친구들의 반응도 있으니 짤리기 전에 한번 보길 추천한다.</p>
<p>이번 유출로 인해 모델을 받아 손쉽게 customize, 테스트해 볼 수 있다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>관련글</p>
<ul>
<li><a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a></li>
<li><a href="https://jinsbot.com/gpt-3-5-python/">GPT-3.5 python에서 사용하기</a></li>
<li><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></li>
<li><a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a></li>
<li><a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/gpt3-5-turbo/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">877</post-id>	</item>
		<item>
		<title>chatGPT 한계점과 대체재에 대해</title>
		<link>https://jinsbot.com/chatgpt-alternative/</link>
					<comments>https://jinsbot.com/chatgpt-alternative/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Fri, 17 Feb 2023 09:33:30 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[chatGPT]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[GPT3.5]]></category>
		<category><![CDATA[openAI]]></category>
		<category><![CDATA[로우코드]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=873</guid>

					<description><![CDATA[<p>chatGPT 는 궁극의 AI? 이전글에서 chatGPT 와 동일한 GPT 3.5의 python api에 대해 알아봤다. 분명 유용한 툴이지만 세상을 바꿀 정도일까? chatGPT 의 단점에 대해 알아보자. 최적의 답변이 아니다. GPT에는 별도의 지능이 없기때문에 학습된 데이터가 옳은지 틀린지 얼마나 좋은지 평가할 수 없다. 따라서 학습 시킨 데이터의 질에 따라 답변의 질도 결정된다. 또한, 내용을 조합하여 답변하기 때문에 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">chatGPT 는 궁극의 AI?</h2>
<p><a href="https://jinsbot.com/gpt-3-5-python/" target="_blank" rel="noreferrer noopener">이전글</a>에서 chatGPT 와 동일한 GPT 3.5의</p>
<p>python api에 대해 알아봤다.</p>
<p>분명 유용한 툴이지만 세상을 바꿀 정도일까?</p>
<p>chatGPT 의 단점에 대해 알아보자.</p>
<h3 class="wp-block-heading">최적의 답변이 아니다.</h3>
<p>GPT에는 별도의 지능이 없기때문에</p>
<p>학습된 데이터가 옳은지 틀린지 얼마나 좋은지 평가할 수 없다.</p>
<p>따라서 <strong>학습 시킨 데이터의 질</strong>에 따라</p>
<p>답변의 질도 결정된다.</p>
<p>또한, 내용을 조합하여 답변하기 때문에</p>
<p>이 과정에서 오류가 섞여 들어갈 수 있다.</p>
<p>특히, 코딩 측면에서 이런 점이 두드러진다.</p>
<p>chatGPT 가 제공해 주는 코드, 예제는</p>
<p>분명 유용하지만 수준이 높지 않다.</p>
<p>이러한 불완전성은 <strong>기술적 특성</strong>이자 <strong>한계</strong>이고</p>
<p>애초에 노코드 , 로우코드 솔루션의 목적은 다음과 같다.</p>
<ol>
<li><strong>초보자</strong>의 손쉬운 사용</li>
<li><strong>단순 반복 코드</strong>의 작성 시간 단축</li>
</ol>
<p>따라서 chatGPT 가 현업 프로그래머를 대체할 수는 없다.</p>
<p>최적의 코드를 제공하지 못하는게 당연하고</p>
<p>이에 대해 불평한다면 기술의 목적,용도를</p>
<p>잘못 이해한 것이다.</p>
<p>애초에 목적</p>
<p>현업 프로그래머를 대체하는</p>
<p>애초에 chatGPT 나 copilot의 목적은</p>
<p>프로그래머를 대체하는 것이 아니다.</p>
<h3 class="wp-block-heading">추가적인 학습이 어렵다.</h3>
<p>chatGPT 의 잘못된 응답에 지적을 할 경우</p>
<p>사람처럼 오류를 인정하고 내용을 정정한다.</p>
<p>실시간 학습이 이루어진다고 착각할 수 있지만</p>
<p>상황에 맞게 반응하는 것일 뿐이다.</p>
<p>좋은 내용을 선별하여 학습 된다고 하지만</p>
<p>언제 어떤 방식으로 이루어지는지 알려진 바 없다.</p>
<p>물론 chatGPT 도 추가 학습을 위한 api 를 공개하겠지만</p>
<p>생각보다 <strong>비용</strong>이 비쌀 것이다.</p>
<p>현재 같은 GPT3.5 인 Davinci 의 추가학습 모델은</p>
<p>사용시 1k token(750단어)당 0.12불의 비용을 지불해야한다. (23년 2월)</p>
<p>개인에게 부담되는 가격은 아니지만 사용자가 수십명만 되어도</p>
<p><strong>상당한 비용</strong>이 발생할 것이다.</p>
<h3 class="wp-block-heading">저작권 및 기밀정보 문제</h3>
<p>공개적으로 코드, 정보를 올린거지만</p>
<p>출처표기 없는 상업적 사용을 달가워할 사람은 없다.</p>
<p>그런 면에서 구글의 바드 는 정보의 출처를</p>
<p>표기할 것이라고 한다.</p>
<p>현재 GPT3.5 모델은 openai를 통해서만 학습 시킬 수 있는데</p>
<p>기업의 경우 기밀 정보 유출에 대한 우려가 있다.</p>
<p>따라서 삼성전자 는 정보 유출을 막기 위해</p>
<p>chatGPT 의 접속을 차단했다.</p>
<p>당연히, 별도 학습된 모델은 특정 계정, 회사에서만</p>
<p>접근할 수 있을 것이다.</p>
<p>그렇더라도 기업입장에서 서버를 외부에 두는것은 큰 부담이다.</p>
<h2 class="wp-block-heading">chatGPT 대체재</h2>
<p>그러면 local 등 에서 사용할 수 있는 chatGPT의 대안들을 알아보자.</p>
<p>모델이름 뒤에 있는 숫자는 parameter의 개수를 나타내며</p>
<p>일반적으로 높을수록 성능이 더 좋은 대신 고사양을 요구한다.</p>
<h2 class="wp-block-heading">GPT-J 6B</h2>
<p><a href="https://www.eleuther.ai/" target="_blank" rel="noreferrer noopener">eleutherAI</a>에서 Ben Wang의 JAX를 기반으로 Pile 이라는 데이터셋으로 만든 모델이다.</p>
<p>자체적인 평가 결과 GPT3 Curie와 유사한 성능을 가진 것으로 보인다.</p>
<p>자세한 설명은 <a href="https://huggingface.co/EleutherAI/gpt-j-6B" target="_blank" rel="noreferrer noopener">huggingface</a>에서 볼 수 있고 간단한 체험도 해볼 수 있다.</p>
<p>최소 12GB의 VRAM이 필요하다.</p>
<p><a href="https://github.com/arrmansa/Basic-UI-for-GPT-J-6B-with-low-vram" target="_blank" rel="noreferrer noopener">low vram 버전</a>도 있지만 성능 손실이 존재한다.</p>
<h3 class="wp-block-heading">GPT-NEOX 20B</h3>
<p>eleutherAI 의 최신 모델로 전작 GPT-NEO를 계승하고 있다.</p>
<p>자체 평가에 따르면 Curie보다는 좋지만</p>
<p>GPT3.5 모델인 Davinci에 미치지는 못한다.</p>
<p><a href="https://textsynth.com/playground.html" target="_blank" rel="noreferrer noopener">textsynth</a>, <a href="https://20b.eleuther.ai/" target="_blank" rel="noreferrer noopener">eleutherAI</a>에서 테스트해볼 수 있다.</p>
<p>최소 40GB의 vram이 필요하기때문에 여기서부터는</p>
<p>A40, A100, RTX A6000 이상이 필요하다.<br />
A100(40G)의 경우 미국 온디맨드 기준 AWS가 시간당 4.1$</p>
<p>GCP가 시간당 3.67$이므로 클라우드에서 구현하는걸 추천한다.</p>
<p>azure 등 더 저렴한 곳도 있으니 자세한 가격은 <a href="https://fullstackdeeplearning.com/cloud-gpus/" target="_blank" rel="noreferrer noopener">이 링크</a>를 참고하라.</p>
<figure class="wp-block-table">
<table>
<thead>
<tr>
<th>Task</th>
<th>Category</th>
<th>Curie</th>
<th>GPT-J-6B</th>
<th>FairSeq-13B</th>
<th>GPT-NeoX-20B</th>
<th>DaVinci</th>
</tr>
</thead>
<tbody>
<tr>
<td>LAMBADA</td>
<td>Sentence Completion</td>
<td>69.51%</td>
<td>68.29%</td>
<td>70.95%</td>
<td>72.00%</td>
<td>75.16%</td>
</tr>
<tr>
<td>ANLI R1</td>
<td>Natural Language Inference</td>
<td>32.80%</td>
<td>32.40%</td>
<td>34.00%</td>
<td>34.00%</td>
<td>36.30%</td>
</tr>
<tr>
<td>ANLI R2</td>
<td>Natural Language Inference</td>
<td>33.50%</td>
<td>34.00%</td>
<td>33.00%</td>
<td>34.40%</td>
<td>37.00%</td>
</tr>
<tr>
<td>ANLI R3</td>
<td>Natural Language Inference</td>
<td>35.50%</td>
<td>35.50%</td>
<td>34.75%</td>
<td>35.40%</td>
<td>36.83%</td>
</tr>
<tr>
<td>WSC</td>
<td>Coreference Resolution</td>
<td>49.54%</td>
<td>49.54%</td>
<td>55.44%</td>
<td>50.00%</td>
<td>59.18%</td>
</tr>
<tr>
<td>WinoGrande</td>
<td>Coreference Resolution</td>
<td>64.56%</td>
<td>64.01%</td>
<td>67.40%</td>
<td>66.10%</td>
<td>69.93%</td>
</tr>
<tr>
<td>HellaSwag</td>
<td>Sentence Completion</td>
<td>54.81%</td>
<td>36.53%</td>
<td>57.69%</td>
<td>53.50%</td>
<td>63.46%</td>
</tr>
<tr>
<td><strong>Average</strong></td>
<td></td>
<td>48.60%</td>
<td><strong>45.75%</strong></td>
<td>50.43%</td>
<td><strong>49.34%</strong></td>
<td><strong>53.98%</strong></td>
</tr>
</tbody>
</table><figcaption>EleutherAI 평가 결과(standard language modeling tasks)</figcaption></figure>
<h3 class="wp-block-heading">OPT-175B : chatGPT 에 가장 근접</h3>
<p>meta ( facebook) 에서 공개한 모델로 GPT3.5와</p>
<p>동일한 parameter 갯수를 가진다.</p>
<p>현재 API를 완전히 공개하였으며 비상업용, 연구적 목적에</p>
<p>한하여 자유롭게 사용할 수 있다.</p>
<p><a href="https://opt.alpa.ai/#generation" target="_blank" rel="noreferrer noopener">링크</a>에서 체험해 볼 수 있으며 데이터셋, 알고리즘의</p>
<p>차이때문인지 davinci 보다는 <strong>성능이 떨어진다.</strong>(<a href="https://arxiv.org/pdf/2205.01068.pdf" target="_blank" rel="noreferrer noopener">논문</a>)</p>
<p>클러스터 구성을 지원하며 총 350GB의 VRAM이 필요하고</p>
<p>최대 700GB의 RAM이 필요하다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>관련글</p>
<ul>
<li><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></li>
<li><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></li>
<li><a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a></li>
<li><a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a></li>
</ul>
<p>The post <a href="https://jinsbot.com/chatgpt-alternative/">chatGPT 한계점과 대체재에 대해</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/chatgpt-alternative/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">873</post-id>	</item>
		<item>
		<title>GPT-3.5 python에서 사용하기</title>
		<link>https://jinsbot.com/gpt-3-5-python/</link>
					<comments>https://jinsbot.com/gpt-3-5-python/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Tue, 07 Feb 2023 09:27:43 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[chatGPT]]></category>
		<category><![CDATA[GPT]]></category>
		<category><![CDATA[GPT3]]></category>
		<category><![CDATA[openAI]]></category>
		<category><![CDATA[생성AI]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=869</guid>

					<description><![CDATA[<p>GPT-3 는 OpenAI 가 개발한 대형 언어 모델 (Large Language Model, LLM )이다. 12Billion (120억)개의 paramter를 가지는것이 특징이고 Github Copiliot에 사용되어 유명해졌다. 최근 각광받는 chatGPT 가 GPT-3.5 에 해당하며 무려 170B( 1700억) 개의 parmeter를 가진다. chatGPT는 23년 2월 기준 아직 python api 가 공개되지 않았지만 같은 GPT-3.5에 속하는 davinci 모델은 python에서 사용 가능하다. text-davinci-003 는 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/gpt-3-5-python/">GPT-3.5 python에서 사용하기</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>GPT-3 는 OpenAI 가 개발한 대형 언어 모델 (Large Language Model, LLM )이다.</p>
<p>12Billion (120억)개의 paramter를 가지는것이 특징이고</p>
<p><a href="https://namu.wiki/w/GitHub%20Copilot" target="_blank" rel="noreferrer noopener">Github Copiliot</a>에 사용되어 유명해졌다.</p>
<p>최근 각광받는 chatGPT 가 GPT-3.5 에 해당하며</p>
<p>무려 170B( 1700억) 개의 parmeter를 가진다.</p>
<p>chatGPT는 23년 2월 기준 아직 python api 가 공개되지 않았지만</p>
<p><a href="https://platform.openai.com/docs/model-index-for-researchers" target="_blank" rel="noreferrer noopener">같은 GPT-3.5</a>에 속하는 davinci 모델은 python에서 사용 가능하다.</p>
<p>text-davinci-003 는 21년 4분기까지의 데이터로 학습되었기 때문에</p>
<p>chatGPT 에 비해 약간 떨어지지만 충분히 훌륭한 성능을 보여준다.</p>
<h3 class="wp-block-heading">그래서 사용법은?</h3>
<p>이 <a href="https://openai.com/api/" target="_blank" rel="noreferrer noopener">링크</a>에서 회원가입이 가능하고 <a href="https://platform.openai.com/docs/api-reference/introduction" target="_blank" rel="noreferrer noopener">문서</a>도 잘 만들어져 있다.</p>
<p>openai 패키지 사용법은 해당 문서에 잘 나와 있으니</p>
<p>패키지 없이 사용하는 법을 설명하겠다.</p>
<p>우선 가입 후 <a href="https://platform.openai.com/account/api-keys" target="_blank" rel="noreferrer noopener">링크</a>에 들어가 api-key를 발급받는다.</p>
<p>api 키만 있으면 코드는 정말 간단하다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import requests
import json
headers={"Authorization":"Bearer 발급받은API키","Content-Type":"application/json"}
link="https://api.openai.com/v1/completions"
data={"model": "text-davinci-003", "prompt": "let me know how to cook scones ", "temperature": 0.9, "max_tokens": 300}
res=requests.post(link,data=json.dumps(data),headers=headers)
print(res.json()['choices'][0]['text'])</pre>
<p>input에 대해 설명하자면 다음과 같다.</p>
<ul>
<li>link:질문에 해당하는 링크이며 image 생성 등에는 다른 링크가 필요하다.</li>
<li>prompt: 질문이나 요청을 적으면 된다.</li>
<li>temperature: 높을수록 창의적이지만 부정확한 답이 출력될 수 있다. (기본값:1)</li>
<li>top_p: 방법은 다르지만 temperature와 같은 역할, temperature와 top_p 둘 중 하나만 사용 (기본값:1)</li>
<li>max_tokens: 답변 문장의 최대 길이를 결정함</li>
<li><a href="https://platform.openai.com/docs/api-reference/completions/create" target="_blank" rel="noreferrer noopener">이외는 링크 참조바람</a></li>
</ul>
<h3 class="wp-block-heading">GPT 3.5 사용결과</h3>
<h4 class="wp-block-heading">상식</h4>
<p><strong>질문</strong><br />
: <em>let me know how to cook scones.</em></p>
<p><img decoding="async" src="https://s0.wp.com/latex.php?latex=%5Crightarrow&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="&#92;rightarrow" class="latex" />Ingredients</p>
<ul>
<li>3 cups all-purpose flour</li>
<li>1 tablespoon baking powder</li>
<li>1/2 teaspoon salt</li>
<li>3/4 cup butter, melted</li>
<li>2 eggs</li>
<li>1/2 cup milk</li>
<li>1/2 cup sugar</li>
</ul>
<p>Directions</p>
<ol>
<li>Preheat oven to 400 degrees F (200 degrees C). Grease a baking sheet.</li>
<li>In a large bowl, sift together flour, baking powder and salt.</li>
<li>In a separate bowl, stir together melted butter, eggs and milk.</li>
<li>Make a well in the center of the flour mixture, and pour in the wet ingredients.</li>
<li>Stir together until a soft dough forms. Stir in sugar.</li>
<li>Roll out dough on a lightly floured surface, and cut into desired shapes (e.g. circles or wedges).</li>
<li>Place on prepared baking sheet, and bake for 10 to 12 minutes. Remove from oven, and cool. Serve warm.</li>
</ol>
<p>굽는 시간, 재료의 양에 차이가 있지만 충분히 조리 가능한 레시피이며</p>
<p>chatGPT로부터 받은 답변도 대동소이 했다.</p>
<h4 class="wp-block-heading">코딩</h4>
<p><strong>질문</strong>: <em>suggest me top 5 alternatives of pyqt.</em></p>
<p><img decoding="async" src="https://s0.wp.com/latex.php?latex=%5Crightarrow&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="&#92;rightarrow" class="latex" /></p>
<ol>
<li>GTK+</li>
<li>wxPython</li>
<li>Kivy</li>
<li>Tkinter</li>
<li>PySide</li>
</ol>
<p>사용가능한 라이브러리들을 잘 보여준다.</p>
<p>ChatGPT 에 물어보면 부연설명을 넣어주지만 pyside가 빠지는 점이 아쉽다.</p>
<p><strong>질문</strong>: <em>What ’s the difference between pyside and pyqt</em></p>
<p><img decoding="async" src="https://s0.wp.com/latex.php?latex=%5Crightarrow&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="&#92;rightarrow" class="latex" />PySide and PyQt are both Python bindings for the popular Qt cross-platform application and UI framework. The main difference between the two is that PySide is free and open source, while PyQt is proprietary and subject to a commercial license. PySide also has a more liberal license than PyQt, which allows developers to use it for both open source and commercial projects. PySide also has a more modern API, which makes it easier to use than PyQt.</p>
<p>마지막에 엉뚱한 말이 붙었지만 전반적으로 핵심을 잘 파악한 훌륭한 답변이다.</p>
<p>chatGPT가 community 규모에 대해 좀 더 정확한 정보를 덧붙였다.</p>
<p><strong>질문</strong>: <em>can you give me streamlit example for python? It ’s for drawing graph</em></p>
<p><img decoding="async" src="https://s0.wp.com/latex.php?latex=%5Crightarrow&#038;bg=ffffff&#038;fg=000&#038;s=0&#038;c=20201002" alt="&#92;rightarrow" class="latex" /></p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import streamlit as st
import matplotlib.pyplot as plt

#Create some data

x = [1, 2, 3, 4, 5]
y = [2, 4, 6, 8, 10]

#Create the plot

plt.plot(x, y)

#Add the plot to the Streamlit app

st.pyplot()</pre>
<p>pyplot의 argument가 빠졌다는 warning이 뜨지만 잘 plot 된다.</p>
<p>chatGPT 의 답변에는 무의미한 코드가 한줄 있지만 좀 더 상세했다.</p>
<h3 class="wp-block-heading">GPT 3.5 단점은 없어?</h3>
<p>현재 Davinci 모델은 유료이며 <strong>1k token(750 단어)당 0.02$</strong>의 사용료가</p>
<p>책정되어있다. 그리고 돌아올 수 있는 답변은 최대 4000token(3000단어)이다.</p>
<p>저렴한 가격이지만 chatGPT가 앞으로도 무료 서비스를 제공한다면</p>
<p>일반 사용자에게 merit이 떨어 진다.</p>
<p>또한 chatGPT와 달리 답변에 추가적인 질문이 불가능하다.</p>
<h3 class="wp-block-heading">유료면 이걸 왜써?</h3>
<p>가입시 3개월간 사용가능한 18$의 credit을 제공하기때문에</p>
<p>계정을 만들어가며 사용하면 무한대로 사용이 가능 하다.</p>
<p>게다가 현재 davinci모델은 추가학습( fine-tuning) 이 가능하다.</p>
<p>즉, 업체나 개인별로 자신에게 필요한 데이터 일부를</p>
<p>추가적으로 학습시킬 수 있는 강력한 기능을 제공한다.</p>
<p>현재 chatGPT 는 추후 활용을 위해 피드백을 수집할 뿐</p>
<p>추가적으로 학습이 이루어지지 않는다.</p>
<p>GPT3.5의 추가 학습 및 사용에는 각각</p>
<p>1k token 당 <strong>0.03$,0.12</strong>$의 비용이 부과된다.</p>
<p>그렇다면 학습에 별도 비용이 발생하지 않는 대체재는 없을까?</p>
<p><a href="https://jinsbot.com/chatgpt-alternative/" target="_blank" rel="noreferrer noopener">다음글</a>에서 chatGPT의 한계점을 짚어보며 대체재에 대해 소개하겠다.</p>
<hr class="wp-block-separator has-alpha-channel-opacity is-style-wide" />
<p>ChatGPT의 python API가 출시 되었다. (23.03.01)</p>
<p><a href="https://jinsbot.com/gpt3-5-turbo/">GPT3.5 Turbo – ChatGPT python API 소개</a></p>
<p><a href="https://jinsbot.com/chat-gpt-hybrid-python/">chat GPT 하이브리드 앱 만들기 C# python</a></p>
<p>관련글</p>
<p><a href="https://jinsbot.com/gpt-4-introduction/">GPT-4 뭐가 달라 졌을까?</a></p>
<p><a href="https://jinsbot.com/%eb%b9%99-new-bing-intro/">빙 생성 AI 까지 넘보는 중</a></p>
<p>The post <a href="https://jinsbot.com/gpt-3-5-python/">GPT-3.5 python에서 사용하기</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/gpt-3-5-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">869</post-id>	</item>
		<item>
		<title>30분만에 나스닥 기업 주가 예측</title>
		<link>https://jinsbot.com/%ec%a3%bc%ea%b0%80-%ec%98%88%ec%b8%a1-%eb%82%98%ec%8a%a4%eb%8b%a5/</link>
					<comments>https://jinsbot.com/%ec%a3%bc%ea%b0%80-%ec%98%88%ec%b8%a1-%eb%82%98%ec%8a%a4%eb%8b%a5/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Sat, 01 Oct 2022 05:01:46 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Deep learning]]></category>
		<category><![CDATA[LSTM]]></category>
		<category><![CDATA[PYTHON]]></category>
		<category><![CDATA[TENSORFLOW]]></category>
		<category><![CDATA[예측]]></category>
		<category><![CDATA[주가]]></category>
		<category><![CDATA[코딩]]></category>
		<guid isPermaLink="false">https://jinsbot.com/?p=768</guid>

					<description><![CDATA[<p>주가 예측 서론 회사에서 주가 예측 과 관련된 코딩 공모전을 열었다. 제대로 인공신경망 모델을 만들기 위해서는 설계, 튜닝에 상당한 시간을 투자해야한다. 현생이 바쁘기 때문에 순위는 일찌감치 포기했다. 다만 구현 난이도가 궁금해서 인터넷 상 코드를 테스트해 보았다. Github 가 보편화된 이후로 코딩 실력은 필요한 코드를 얼마나 빠르게 찾아 응용할 수 있는지에 달렸다. 다행히 주가 예측 에 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/%ec%a3%bc%ea%b0%80-%ec%98%88%ec%b8%a1-%eb%82%98%ec%8a%a4%eb%8b%a5/">30분만에 나스닥 기업 주가 예측</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">주가 예측 서론</h2>
<p>회사에서 주가 예측 과 관련된 코딩 공모전을 열었다.</p>
<p>제대로 인공신경망 모델을 만들기 위해서는</p>
<p>설계, 튜닝에 상당한 시간을 투자해야한다.</p>
<p>현생이 바쁘기 때문에 순위는 일찌감치 포기했다.</p>
<p>다만 구현 난이도가 궁금해서 인터넷 상 코드를 테스트해 보았다.</p>
<p>Github 가 보편화된 이후로 코딩 실력은 필요한 코드를</p>
<p>얼마나 빠르게 찾아 응용할 수 있는지에 달렸다.</p>
<p>다행히 주가 예측 에 대한 코드는 인터넷에 차고 넘친다.</p>
<p><strong>코드 선택 기준</strong></p>
<ul>
<li>Tensorflow 로 작성될 것</li>
<li>VM에서 학습 가능한 복잡도</li>
<li>논문 수준의 분석, 설계 필요없음</li>
<li>20년도 이후 비교적 최신 코드</li>
</ul>
<p>많은 코드들 중에 위 조건에 해당하는 코드를 탐색했다.</p>
<p>주가 예측에는 보편적으로 LSTM , GRU , ARIMA 등이 사용되는데</p>
<p>데이터셋의 종류, 형태에 따라 성능이 달라진다.</p>
<p>그리고 LSTM + GRU , LSTM + ARIMA , ARIMA + GRU 처럼</p>
<p>하이브리드로 구성될 때 성능이 향상된다.</p>
<p>이중에서 LSTM + GRU 에 해당하는 코드들을 찾아봤다.</p>
<p>둘 다 <a href="https://www.kaggle.com/code/vineethars/stock-prediction-lstm-gru" target="_blank" rel="noreferrer noopener">RNN</a>이기때문에 hybrid 로 만들기 쉽고</p>
<p>tensorflow 로 구현하기도 쉽다.</p>
<p><a href="https://web.archive.org/web/20240529091126/https://www.kaggle.com/code/vineethars/stock-prediction-lstm-gru" target="_blank" rel="noreferrer noopener">Kaggle 원본 코드</a>는 링크로 첨부하니 참고하길 바란다.</p>
<h2 class="wp-block-heading">본론</h2>
<h3 class="wp-block-heading">모듈 및 데이터 임포트</h3>
<p>코드에서 사용되는 모듈들과 설명</p>
<ul>
<li>pandas : CSV를 사용하기 쉬운 dataframe , series로 변환,저장</li>
<li>numpy : 데이터 가공</li>
<li>sklearn : 학습에 필요한 utility 제공</li>
<li>tensorflow : 실질적으로 학습을 진행</li>
<li>matplotlib : plot 에 사용</li>
</ul>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_split
import os
os.environ['TF_ENABLE_ONEDNN_OPTS']='0'
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
from tensorflow.keras.layers import LSTM, GRU
from keras.callbacks import EarlyStopping,ModelCheckpoint
from sklearn.preprocessing import MinMaxScaler

#import data
org_df={}
dflist=['AAPL','AMD','ATVI','CSCO','EBAY','GOOGL','INTC','MSFT','MU','NTGR','NVDA','SBUX','STX','TSM','WDC']
for i in range(1,16):
    org_df[i]=pd.read_csv(f"/dataset/{dflist[i-1]}.csv")</pre>
<h3 class="wp-block-heading">전처리</h3>
<p>우선 데이터를 별도로 어떻게 전처리 할것인지 정해야 한다.</p>
<p>sklearn 에서 제공하는 MinMaxScaler 를 사용해</p>
<p>0에서 1 사이의 값을 가지도록 정규화 했다.</p>
<p>데이터의 노이즈가 심하지 않아 필터는 적용하지않았다.</p>
<p>data는 6개의 column을 가지는데 원본 저자는 <strong>종가</strong>만 학습에 사용했다.</p>
<p>다른 데이터로 accuracy를 올릴 수도 있지만 학습,튜닝에 오랜시간이 걸린다.</p>
<p>또한 volume을 제외한 column 들은 종가와 유사하기때문에</p>
<p>accuracy를 올리는데 효율적이지 못하다.</p>
<p>단순하게 k개의 사전데이터로 다음 날을 예측하도록 input을 구성했다.</p>
<figure class="wp-block-image size-full is-resized"><a href="https://jinsbot.com/wp-content/uploads/2024/09/prediction.webp"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-771" src="https://jinsbot.com/wp-content/uploads/2024/09/prediction.webp" alt="" width="768" height="346" srcset="https://jinsbot.com/wp-content/uploads/2024/09/prediction.webp 768w, https://jinsbot.com/wp-content/uploads/2024/09/prediction-300x135.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/prediction-150x68.webp 150w" sizes="(max-width: 768px) 100vw, 768px" /></a><br />
<noscript><br />
<img data-lazy-fallback="1" fetchpriority="high" decoding="async" src="https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/prediction.jpg" alt="주가 예측 개념도" class="wp-image-798" width="750" height="338" srcset="https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/prediction.jpg 750w, https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/prediction-300x135.jpg 300w, https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/prediction-150x68.jpg 150w" sizes="(max-width: 750px) 100vw, 750px"/><br />
</noscript></figure>
<p>따라서 위 그림 대로 Input 과 Output 데이터를 가공한다.</p>
<p>train set과 validation set을 나누어주기 위해서는 train_test_split을 사용하거나</p>
<p>model.fit에서 validation_split 옵션을 사용하면 된다.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def create_dataset(dataset, time_step=1):
    dataX, dataY = [], []
    for i in range(len(dataset)-time_step-1):
        a = dataset[i:(i+time_step)]    
        dataX.append(a)
        dataY.append(dataset[i + time_step])
    return np.array(dataX), np.array(dataY)

t_step=10
scaler=MinMaxScaler(feature_range=(0,1))
scaled=scaler.fit_transform(np.array(org_df[1]['Close']).reshape(-1,1))
X_train,y_train=create_dataset(scaled,t_step)
# X_train,X_val,y_train,y_val=train_test_split(X_train,y_train,test_size=0.3,random_state=0)</pre>
<h3 class="wp-block-heading">신경망 구축 및 학습</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">def custom_loss(y_true, y_pred):
    mae = tf.keras.losses.MeanAbsoluteError()
    return mae(y_true, y_pred)/np.mean(abs(y_true))

callbacks = [EarlyStopping(monitor='val_loss',
                                           patience=15,min_delta=0.01),
             ModelCheckpoint(filepath='best_model.h5',
                                             monitor='val_loss',
                                             save_best_only=True, restore_best_weights=True)]
model=Sequential()
model.add(LSTM(32,return_sequences=True,input_shape=(t_step,1)))
model.add(LSTM(32,return_sequences=True))
model.add(Dropout(0.2))

model.add(GRU(32,return_sequences=True))
model.add(Dropout(0.2))

model.add(GRU(32,return_sequences=True))
model.add(GRU(32))
model.add(Dropout(0.2))

model.add(Dense(1))

model.compile(loss=custom_loss,optimizer='adam' , metrics = [ "mae",'mse'],run_eagerly=True)
model.summary()


history=model.fit(X_train,y_train,validation_split=0.3,epochs=100,batch_size=64,verbose=0,callbacks=callbacks)
# history=model.fit(X_train,y_train,validation_data=(X_val,y_val),epochs=100,batch_size=64,verbose=1,callbacks=callbacks)
print('done')</pre>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">Model: "sequential_6"
_________________________________________________________________
 Layer (type)                Output Shape              Param #   
=================================================================
 lstm_12 (LSTM)              (None, 10, 32)            4352      
                                                                 
 lstm_13 (LSTM)              (None, 10, 32)            8320      
                                                                 
 dropout_18 (Dropout)        (None, 10, 32)            0         
                                                                 
 gru_18 (GRU)                (None, 10, 32)            6336      
                                                                 
 dropout_19 (Dropout)        (None, 10, 32)            0         
                                                                 
 gru_19 (GRU)                (None, 10, 32)            6336      
                                                                 
 gru_20 (GRU)                (None, 32)                6336      
                                                                 
 dropout_20 (Dropout)        (None, 32)                0         
                                                                 
 dense_6 (Dense)             (None, 1)                 33        
                                                                 
=================================================================</pre>
<p>LSTM과 GRU가 같이 배치된 하이브리드 모델이다.</p>
<p>학습의 속도, accuracy는 모델의 배치,shape에도 크게 영향 받으나 절대적인 법칙은 없다.</p>
<p>성능을 보면서 적절하게 변경하면 된다.</p>
<p>원본 코드와 다르게 레이어를 배치해 봤지만 원본대로 하는게 가장 정확도가 높다.</p>
<p>loss는 mse, mae 등 여러가지를 사용할 수 있는데 코드에 나온것처럼</p>
<p>새로운 loss function을 정의해도 된다.</p>
<p>물론, mae와 mse 를 섞는 등 다른 평가 요소를 사용하여 성능을 더 개선할 수 있다.</p>
<p>코드수행에 생각보다 시간이 걸리는데 EarlyStopping callback을 통해</p>
<p>학습을 조기 중단시킬 수 있다.</p>
<p>혹은 processpool executor를 사용하여 수행속도를 올릴 수 있다.</p>
<p>마지막으로 model.fit을 통해 학습을 수행하는데</p>
<p>epochs, batch_size 등 각종 parameter의 튜닝이 필요하다.</p>
<p>이러한 hyper parameter는 keras의 tuner를 사용해도 되고</p>
<p>단순한 반복문을 만들어 기록해도 된다.</p>
<p>verbose를 1로 두면 학습 과정을 지켜볼 수 있습니다.</p>
<p>epoch별 loss값을 지켜보면 학습이 정상진행되는지 알 수 있기때문에 신경망을 설계할 때 유용하다.</p>
<p>다음 코드를 통해 학습이 잘됐는지 plot해보자.</p>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">hh=history.history
epochs=range(len(hh['loss']))
plt.plot(epochs,hh['loss'],label='loss')
plt.plot(epochs,hh['val_loss'],label='val_loss')
plt.legend()
plt.show()</pre>
<figure class="wp-block-image size-full"><a href="https://jinsbot.com/wp-content/uploads/2024/09/plot_history.webp"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-770" src="https://jinsbot.com/wp-content/uploads/2024/09/plot_history.webp" alt="" width="372" height="248" srcset="https://jinsbot.com/wp-content/uploads/2024/09/plot_history.webp 372w, https://jinsbot.com/wp-content/uploads/2024/09/plot_history-300x200.webp 300w, https://jinsbot.com/wp-content/uploads/2024/09/plot_history-150x100.webp 150w" sizes="(max-width: 372px) 100vw, 372px" /></a><br />
<noscript><br />
<img loading="lazy" data-lazy-fallback="1" decoding="async" width="372" height="248" src="https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/plot_history.png" alt="주가 예측 history" class="wp-image-826" srcset="https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/plot_history.png 372w, https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/plot_history-300x200.png 300w, https://web.archive.org/web/20240529091126im_/https://jinsbot.com/wp-content/uploads/2022/10/plot_history-150x100.png 150w" sizes="(max-width: 372px) 100vw, 372px"/><br />
</noscript></figure>
<p>loss와 validation_loss가 둘 다 수렴하고 있으므로</p>
<p>학습이 어느정도 잘 이루어지고 있다.</p>
<p>과적합이 일어난다면 신경망의 설계,변수를 바꾸거나</p>
<p>정규화를 변경함으로써 해결할 수 있다.</p>
<h3 class="wp-block-heading">주가 예측 값 도출</h3>
<pre class="EnlighterJSRAW" data-enlighter-language="python" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">prd={}
nmae={}
day_to_predict=7
for _,i in enumerate(org_df):
    last_data=scaler[i].fit_transform(np.array(org_df[i]['Close'].iloc[-t_step:]).reshape(-1,1))
    prd_list=[]
    for j in range(day_to_predict):
        last_data=last_data[-t_step:]
        prd_temp=models[i].predict(np.array(last_data).reshape(1,t_step[i],1),verbose=0)
        prd_list.append(prd_temp[0][0])
        last_data=np.append(last_data,pd.Series(prd_temp[0][0]))
    prd[i]=scaler[i].inverse_transform(np.array(prd_list).reshape(-1,1))[:,0]
    nmae[i]=my_loss(test_df[i]['Close'][:7],prd[i])
    print(f'{dflist[i-1]} : {nmae[i]}')

print(f'avg={pd.Series(nmae).mean()}')</pre>
<p>이제 위 코드를 통해 주가 예측 데이터를 도출한다.</p>
<p>루틴을 간단하게 설명하면 다음과 같습니다.</p>
<ol>
<li><strong>마지막 k개</strong>의 데이터를 input으로 만든다.</li>
<li>input을 통해 다음날의 데이터를 예측한다.</li>
<li>예측 데이터를 input 데이터에 덧붙인다.</li>
</ol>
<p>위 과정을 예측하고 싶은만큼 날만큼 반복하여 loss값을 기록한다.</p>
<p>기록된 loss값이나 평균 loss값으로 학습이 잘 이루어졌는지 확인 가능하다.</p>
<h2 class="wp-block-heading">주가 예측 결론</h2>
<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">AAPL : 0.04620344564318657
AMD : 0.11094651371240616
ATVI : 0.0061081573367118835
CSCO : 0.01842576451599598
EBAY : 0.026052556931972504
GOOGL : 0.03204019367694855
INTC : 0.03417059779167175
MSFT : 0.05612574890255928
MU : 0.008338606916368008
NTGR : 0.02389097958803177
NVDA : 0.0929316058754921
SBUX : 0.015276948921382427
STX : 0.07766019552946091
TSM : 0.02993595041334629
WDC : 0.03140253946185112
avg = 0.04063398440678914</pre>
<ul>
<li><strong>평균 오차</strong>: 주가의 4~5%</li>
<li><strong>소요시간</strong>: 코딩 30분 + 학습 30분 (CPU,싱글 코어 기준)</li>
</ul>
<p>약간의 튜닝으로도 성능을 2~3%까지 개선할 수 있다.</p>
<p>30분짜리 코딩치고 주가 예측 결과가 나쁘지 않다.</p>
<p>강화학습, deep learning 등에서 <strong>이론 공부</strong>만으로 시간을 버리는 경우가 많다.</p>
<p>Matlab의 Tuner/Optimizer를 쓰면서 알고리즘을 다 이해하는건 아니듯이</p>
<p>알고리즘 이해에 너무 긴 시간을 쏟을 필요 없다.</p>
<p>차라리 kaggle 등에서 실용적인 코드를 찾아 <strong>직접 해보는것</strong>이 도움이 된다.</p>
<p>여러분들께도 올려드린 코드가 도움이 되길 바란다.</p>
<p>The post <a href="https://jinsbot.com/%ec%a3%bc%ea%b0%80-%ec%98%88%ec%b8%a1-%eb%82%98%ec%8a%a4%eb%8b%a5/">30분만에 나스닥 기업 주가 예측</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/%ec%a3%bc%ea%b0%80-%ec%98%88%ec%b8%a1-%eb%82%98%ec%8a%a4%eb%8b%a5/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">768</post-id>	</item>
		<item>
		<title>CYGWIN 설치</title>
		<link>https://jinsbot.com/install-cygwin/</link>
					<comments>https://jinsbot.com/install-cygwin/#respond</comments>
		
		<dc:creator><![CDATA[geniuskpj]]></dc:creator>
		<pubDate>Fri, 08 Feb 2019 15:55:25 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Computer]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[리눅스]]></category>
		<guid isPermaLink="false">http://geniuskpj.tk/?p=60</guid>

					<description><![CDATA[<p>리눅스 개발 환경을 제공해주는 툴이 cygwin과 mingw 입니다. 가상 환경에서 구동하는 vmware 등과는 다르게 여러 프로그램들을 win32용으로 포팅하여서 UNIX의 다양한 툴들을 윈도우에서 사용가능하게 해줍니다. 두 툴의 차이는 cygwin은 posix를 에뮬레이션해서 대부분의 프로그램을 구현해놓은 반면에 mingw는 최소한의 프로그램만 구현해 놓았다고 합니다. 애초에 mingw라는 프로젝트가 cywin으로부터 나왔다고 합니다. 제가 써본 바로는 cywin이 좀 더 큰 용량을 잡아먹는 [&#8230;]</p>
<p>The post <a href="https://jinsbot.com/install-cygwin/">CYGWIN 설치</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>리눅스 개발 환경을 제공해주는 툴이 cygwin과  mingw 입니다. </p>



<p>가상 환경에서 구동하는 vmware 등과는 다르게 여러 프로그램들을 win32용으로 포팅하여서 UNIX의 다양한 툴들을 윈도우에서 사용가능하게 해줍니다.</p>



<p>두 툴의 차이는 cygwin은 posix를 에뮬레이션해서 대부분의 프로그램을 구현해놓은 반면에 mingw는 최소한의 프로그램만 구현해 놓았다고 합니다. </p>



<p>애초에 mingw라는 프로젝트가 cywin으로부터 나왔다고 합니다. </p>



<p>제가 써본 바로는 cywin이 좀 더 큰 용량을 잡아먹는 대신 설치가 간편하고 mingw는 용량이 작은 대신 msys까지 설치해야하기 때문에 좀 더 과정이 복잡한 편입니다. (설치후 환경변수 추가까지 직접 해야하므로)</p>



<p>여기에서는 좀 더 간편한 설치가 가능한 CYGWIN 설치에 대해 알아보도록 하겠습니다.</p>



<p><a href="https://www.dropbox.com/s/4sbpvy3zz9zop3w/cywinsetup-x86_64.exe?dl=0" target="_blank" rel="noreferrer noopener">cygwin 설치파일</a></p>



<p>다양한 설치 방법이 있지만 위 installer가 가장 간편하기 때문에 이 파일을 기준으로 설명하겠습니다.</p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/2601A638578D11990A" alt=""/></figure>



<p>1)설치 시작 화면입니다. 다음 눌러주시면 되겠죠.<br></p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/217F4F38578D119909" alt=""/></figure>



<p>첫번째 항목은 인터넷을 통한 설치, 두번째 항목은 다운만 하고 설치는 안함, 세번째 항목은 이미 받아져있는 것을 통해 설치를 의미합니다. </p>



<p>지금 이 컴퓨터에 바로 설치하실 분은 첫번째 항목을 선택하시면 됩니다. </p>



<p>인터넷이 연결 안된 pc에 설치시에는 두번째 항목으로 받은뒤 세번째 항목으로 설치해주시면 되겠죠? </p>



<p>선택 후 다음 눌러주시면 됩니다.</p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/22019938578D119A0A" alt=""/></figure>



<p>root directory는 cygwin이 설치될 폴더를 지정해주시면 됩니다. 밑의 것은&nbsp;특별한 이유가 없는 이상 all users 선택해주시고 다음&nbsp;눌러주시면 됩니다.<br></p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/257D2D38578D119A0B" alt=""/></figure>



<p>설치파일 다운로드 폴더를 지정하시면 됩니다. 다음 눌러주세요.<br></p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/257CCA38578D119B0B" alt=""/></figure>



<p>프록시를 통해 설치하실 게 아니라면 그냥 다음 눌러 주세요.</p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/267D8D38578D119C0B" alt=""/></figure>



<p>다운로드 받을 사이트를 지정합니다. ftp://ftp.jaist.ac.jp, ftp://ftp.kaist.ac.kr, http://ftp.daum.net 이 세가지가 제일 빠를거에요. 셋중 하나 선택하시고 다음 눌러주세요. </p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/257D5138578D119C0B" alt=""/></figure>



<p>설치할 패키지를 선택하는 항목입니다. all 옆의 글자를 눌러보면 default install uninstall reinstall 이런식으로 변하는 걸 알 수있습니다. </p>



<p>당연한 이야기이지만 default는 설치에 필수인 패키지만 설치하는 것입니다. 자신의 용량이 충분하다면 all install 하셔도 되지만 제가 해보니 패키지 다운에 14기가 전체 설치 용량이 100기가 정도 되더군요. </p>



<p>그러니 필요한 패키지만 검색하셔서 추가하는걸 추천합니다. 지금 설치 안한다고 해도 나중에 추가할 수 있으니깐요. </p>



<p>자신이 설치하고자 하는 패키지명을 아시는 경우 search 옆에 치셔서 추가하면 됩니다. </p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/2653E833578D18DD08" alt=""/></figure>



<p>default 상태에서 설치되는 항목도 있고 설치되지 않는 항목도 있는데요. skip이라고 표시된 패키지는 설치 되지 않습니다. </p>



<p>skip을 한번 누르면 버전이 뜨게 되는데 해당 버전으로 설치되게 됩니다. 카테고리 별로 유심히 봐가면서 설치할 패키지를 선택해 주세요.</p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/211F8B3A578D119D02" alt=""/></figure>



<p>선택한 패키지에 따라 필요한 패키지들이 나오는 화면입니다. 체크된 상태에서 다음 누르세요</p>



<figure class="wp-block-image"><img decoding="async" src="https://t1.daumcdn.net/cfile/tistory/271FB73A578D119D02" alt=""/></figure>



<p>열심히 설치를 합니다. all install 하시면 몇시간쯤 걸려요. default로 하시면 이것보단 빨리 설치 됩니다.</p>



<p>출처:&nbsp;<a href="https://geniuskpj.tistory.com/3">https://geniuskpj.tistory.com/3</a>&nbsp;[geniuskpj의 블로그]

</p>
<p>The post <a href="https://jinsbot.com/install-cygwin/">CYGWIN 설치</a> appeared first on <a href="https://jinsbot.com">JIN&#039;s BOT</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://jinsbot.com/install-cygwin/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">60</post-id>	</item>
	</channel>
</rss>
