LLMとDifyによるOral Case Presentationなどについて(7月の活動報告)

2024/10/16 AI Dify LangGraph LLM Q学習 活動報告

Splendor AIと英語症例発表

今回は、主に前回のSplendor AIの続報と臨床留学時に役立つ英語での症例発表支援ツールの開発とLLMの基礎知識について書きたいと思います。

Splendor AIについて

前回、Q学習の基礎とその理解への練習として、Splendor AIを開発するということについて書きました。今回はその続きです。まずSplendorについて復習をしたいと思います。

前回:Splendorとは

Splendorとは、宝石とカードなどで遊ぶ2~4人のテーブルゲームです。Splendorゲームはルールが比較的シンプルであることからQ学習によるゲームAI開発に採用されました。

前回:簡易Splendor

オリジナルのSplendorでは、Q学習で扱えるほど状態数が限られていないと考え、状態数が少ない簡易Splendorゲームを考え、以下のルールを考えました。

  • 二人でプレイ (相手はCPU)
  • 7点先取が勝ち
  • 山札はなく、画像のカードのみ
  • 貴族カードに必要なカード数は1枚(通常3枚のもの)か2枚(通常4枚のもの)
  • CPUは、場の中で最大の得点のもののみを狙う

今回、SplendorAIを作成し、6万回ぐらいCPUと戦わせて、とりあえず人相手にゲームできるようにしました。

Splendor AIが完成した

  • ゲームUIは、matplotlibで簡易的に表現 (詳しくはSplendor AI_import.ipynbに記載)
  • 学習データ上、私のアカウントのみでプレイ可となっています

しかし、対CPUに対して、直近200戦の勝率が全然上がらない(弱い)という問題点があります。だいたい勝率40%ぐらいで、人がプレイしても勝てます。なので、Splendor AIをどうすれば強くできるか、模索中です。もし誰かお知恵をいただければ、よろしくお願いします。

臨床英語について

ショートプレゼン提案AI

前回の活動報告会で提案されていた、英語でのカンファレンスやプレゼン時に役立つAIについて、私なりに考えてみました。カルテ情報を読み込み、英語のショートプレゼンで役立つ情報にまとめてくれます。

臨床現場でのカンファレンスやショートプレゼンでは、日本と同様に定型文が存在します。海外では検査項目以上に問診内容を重視しがちです。日常用語ではなく、医学用語や略語に変換する必要があります。

カルテ情報に関しては、京大のカルテであるKING7情報が使えかもしれないということなので、部活としてアクセス権が許可されるような支援ツールを作ろうと思います。実際のカルテ情報を学習するとよりよいAIが作成できると考えられます。また海外の症例報告に関しては、参考としてUSMLEのStep2 CSなどが使えるかもしれません。

文章生成AIを想定するため、LLMが良いと考えられます。既存のLLMを利用する方が精度が良いでしょう。ただし、個人情報扱うため、ローカルで扱えるLLMの方がよいと考えられます。発表時間を設定し、臨床的な優先度に応じて文章量を変化させたいと考えています。日本語での症例解説も行うとより理解度が高くなるでしょう。文中での英単語や略語の解説機能もつけようと思います。

大規模言語モデル基礎

プロセッサ各種

AI関連では様々なプロセッサが存在し、重要な役割を担っています。

プロセッサにはCPUやGPU以外にもNPUやTPU、LPU、QPU、DPUがあります。

  • CPU:複雑処理が得意、条件分岐が得意
    • 昔はFPUという浮動小数点floatを扱うためのプロセッサが存在していました。今は浮動小数点を扱うユニットがCPUに組み込まれています。
  • GPU:いわゆるグラボ、もともとはグラフィック用に作られた、並列計算が得意
  • NPU:AI推論に特化した並列計算が得意なunit、機能が特化されている分消費電力が低い
  • DPU:データ関連に特化したunit、ネットワークトラフィック処理、データセキュリティ、データベース高速化に寄与
  • QPU:量子計算ができるunit、量子コンピューター関連

Groqとは

Groqとは、GoogleのTPU開発者が立ち上げたスタートアップ会社です。公式サイトでは、Llama 70BとMixtralが試せます。

大規模言語モデルの現状

様々なLLMが現在登場しています。大きく分けると、大規模モデルと軽量モデルがあります。

  • 大規模モデル:多くが公開されていませんが、1000億~1兆パラメータ以上あると言われています。
    • GPT-4o
    • Claude 3
    • Gemini
  • 軽量モデル:10億~200億パラメータ台のものが多く、オープンソースとなっているものも多いです。
    • Gemma
    • Llama 2
    • Mistral AI
    • Command R+
    • BLOOM
    • Youri
    • ELYZA

大規模モデルの料金

最上位モデルではClaude 3 Opusが一番高価、Gemini 1.5 Proが安価めです。最近ではGPT-4o miniが公開され、Gemini 1.5 Flashよりも安価となっています。GPT-4oを軽量化したものですが、他にもStrawberryが話題になっています。

LLMのベンチマークの概説

LLMの評価に用いられる各ベンチマークでは、評価している能力が異なることに注意が必要です。

  • MMLU:幅広い知識力
  • HumanEval:プログラミング力
  • MATH:高度な数学的推論力
  • MGSM:日常生活上の算術力
  • DROP(f1):複数の情報源を利用する能力
LLMのベンチマークの詳説

MMLU (Massive Multitask Language Understanding)

評価方法: - 57の多様な分野にわたる15,908の多肢選択問題を使用 - 各カテゴリ(人文科学、社会科学、STEM、その他)の平均スコアを算出し、最終的にそれらの平均を取る

特徴: - 幅広い分野(法律、哲学、歴史、物理学、コンピュータサイエンス、数学など)をカバー - 質的分析と量的分析の両方を評価 - 人間の行動や社会に関する知識も含む

反映される能力: - 多様な分野にわたる言語理解能力 - 専門的かつ高度な知識の応用力 - 複数の分野にまたがる総合的な理解力

MATH

評価方法: - 複雑な数学問題を解く能力を評価

特徴: - 高度な数学的推論を要する問題が含まれる

反映される能力: - 数学的思考力と問題解決能力 - 複雑な数学的概念の理解と応用力

HumanEval

評価方法: - プログラミング課題を与え、生成されたコードの正確性を評価

特徴: - 実際のプログラミングスキルを測定

反映される能力: - コード生成能力 - プログラミング言語の理解と応用力

MGSM (MultiStep Grade School Math)

評価方法: - 複数のステップを要する小学校レベルの数学問題を解く

特徴: - 段階的な思考プロセスを評価

反映される能力: - 基本的な算術能力 - 論理的思考と段階的な問題解決能力

DROP (f1) (Discrete Reasoning Over Paragraphs)

評価方法: - テキスト内の情報を基に推論を行い、質問に答える - F1スコアを使用して精度と再現率のバランスを評価

特徴: - 複数の情報源からの推論を要する

反映される能力: - テキスト理解力 - 複数の情報を統合して推論する能力

Chat GPT

定番のLLM、GPT-4 omniが有名です。Chat GPT APIの無料枠は、利用登録後3ヶ月間限定の2500 token分のみです。

GPT-4 Turboよりも、マルチモーダルに推論が行え、また多言語対応力が上がったために、GPT-4 omniという名前になりました。昨日、GPT-4o miniが公開され、GPT-4oを軽量化したものと言われています。他に、Strawberryにも注目です。

Claude

GPT-4oよりも高性能であるClaude 3.5 Sonnetが有名です。Claude 3.5 Sonnet APIの無料枠は、約170万token分のみです。

元Open AIエンジニアのAIスタートアップ「Anthropic」が開発したLLM『Claude』です。軽量なHaikuモデルと精度が高いSonnetモデル、最上位モデルのOpus Sonnetについて、Claude 3.5が公開され、Opusを超えました。Artifacts機能が公開され、LLMとともにリアルタイムでコンテンツ作成と修正が行えるようになった。GPT-4oよりも高性能と言われています。

Gemini

Googleが開発したLLM、無料枠でかなり使えます。Gemini APIの無料枠は1日あたり1500回リクエストまでです(翌日復活します)。(1分あたり15リクエスト、1分あたり100万tokenまで)

現在の最新モデルはGemini 1.5 ProとFlashです。特徴は、100万token入力できること、長文や動画を丸々入力することができる、MoEアーキテクチャを採用していることが特徴です。

APIを気軽に試すなら、無料枠が大きいGemini 1.5ProやFlashが良さそうです。

大規模モデルについて

性能では、Claude 3.5 Sonnetが一番高いですが、無料枠を使い潰す危険性があります。Gemini 1.5ProやFlashでも一定の性能は存在するため、お試しにはちょうどよいです。

問題点:これらの大規模モデルは、すべて入力がサーバー側に渡されて処理されています。もし患者・カルテ情報を入力する場合、個人情報保護の懸念があるかもしれません。

軽量モデル:Gemma

Googleが作ったオープンソースLLM:Gemma

  • オープンソースLLMなので、自分のノートPC(ローカル)で動かすことができる。
  • 最新版は、Gemma 2-9BとGemma2-27B
  • アーキテクチャは、Geminiと同じであり、軽量で高性能
  • Gemma2は、他の軽量モデルよりも高性能

必要なPCのスペック:単一のGoogle Cloud TPU、NVIDIA A100、NVIDIA H100

軽量モデル:Llama

Metaが作ったオープンソースLLM:Llama

  • 現在公開されているモデルは、Llama 3 7BとLlama 3 80B
  • Gemini 1.5 ProやClaude 3 Sonnetよりも高性能とも
  • groqでLlama3を利用することができるため、手元に高スペックPCがなくても試せる

軽量モデル:Mistral

フランスのMistral AIが作ったオープンソースLLM:Mistral

  • GoogleやMetaの研究者が立ち上げたAIスタートアップのMistral AI
  • 現在公開されているMistralのモデルは、Mistral LargeやMistral 8x22B
  • オープンソースで使用できるのは、Mistral 8x22Bの方
  • アクティブなパラメータ数を抑えながら、推論できる

軽量モデル:Command R+

Cohereが作ったオープンソースLLM:Command R+

  • CohereForAIはオープンソースAI以外にも、EmbeddingやRAGを開発している
  • RAGが最適化されているため、コストパフォーマンスが良い
  • GPT 4-TurboやClaude 3 Sonnet, Mistral Largeに並ぶ性能
  • 非営利利用は可能(商用利用はNG)
  • 100BクラスのLLMであるため、動かすためにかなりのPCスペックが必要

軽量モデル:BLOOM

70カ国の研究者が共同で作ったオープンソースLLM:BLOOM

  • AI研究者が集まって、フランスのスパコンJean Zayで学習させたLLM
  • パラメータ数は176B
  • 46の自然言語と13のプログラミング言語で学習
  • 日本語対応なし
  • Hugging Faceから利用ができる

日本語特化モデル

日本語特化モデルのELYZAとYouri

  • ELYZA:Llama2を拡張させて、日本語能力を伸ばしたLLM、ELYZA-japanese-Llama-2-70bという70Bのモデル
  • Youri:rinna社が開発したLlama-2 7Bを元にした日本語LLM、GPTQモデルでは、量子化によりモデルサイズが1/3に

LLMのまとめ

とりあえずLLMを試すならば、Gemini 1.5 ProやFlashとLlama3が良さそうです。GemniのAPIとgroqによるLlamaを使えば、高性能PCがなくてもLLMを試すことができます。ある程度うまくいくAIが作成できたときに、ローカル版に移せるとよいかもしれません。

EmbeddingとRAG

EmbeddingとRAG

文章をベクトルに変換するEmbeddingと文章を検索するRAGについてです。

Embeddingモデルについて

単語や文章を数字の列(ベクトル)に変換することによって、その類似度を計算できるようになります。アンチコメントを削除するアルゴリズムにも役立ちます。最近は出力ベクトルの大きさを後で調整できるマトリョーシカ表現学習などもされています。

RAGについて

LLMに教えたい知識を選択的に教える技術です。pdf化されている知識をプロンプトといっしょにすべてLLMに与えてしまうとtokenを無駄に使用してしまい、また長文であるためうまく処理してくれません

そこで、pdfのうち必要な知識のみを検索し、LLMにその知識のみを与えることで効率的にtokenを使えます。

知識の習得にはFine-tuningもありますが、"Fine-Tuning or Retrieval?"という論文で、RAGのほうが性能が高くなるという結果が出ています。

RAGの仕組みとしては、pdfの情報の中から、プロンプトと類似している情報を抜き出します。類似しているかを計算する際にEmbeddingなどが使用されます。しかし、曖昧なプロンプトの場合、Embeddingだけでは適切に該当箇所の文章を抽出できません。

そこで、たとえば文章に対して想定される質問と答えの組を作成することによって、その質問との類似度を比較するQ2Qという手法が考えられたりしています。

GraphRAGについて

またpdfの情報から事前にGraphを作成し、内容のつながりを明確化することによって、より関連の近い情報を取り出せるようにする技術もあります。

rerankについて

Bi-Encoderのように、文章を独立に入力するのではなく、Cross-Encoderという比較したい文章を同時に入力することで、類似度を精度よく計算する手法もあります。

Difyとは

Difyとは、オープンソースであり、LLMを使ったアプリを簡単に作成できるツールです。Web版もあり、またDockerがあればすぐにローカルに導入できます。

チャットボットやテキストジェネレーター、エージェント、ワークフローなど作成するアプリのタイプを自由に選択できます。

またアプリ上でLLMの使用やメッセージの管理もしやすいです。

特にChatflowやワークフローなどがあるため、複数のLLMを連携できるという点でGPTsよりmも優れているといえます。

ワークフローでのノードでは、RAGが使えたり、質問分類器があったり、単純なロジックを設定したりすることができます。

このノードを使用すると、ユーザーの質問に応じた分岐や、外部のAPIを使用したり、答えられない質問への回答の実装や、PDFの参照、処理に応じたLLMモデルの選択ができます。

ショートプレゼン提案AIの作成

一応提案はしてくれるが、まだ改善の余地はあるという状況です。

国試の症例を30秒でプレゼンさせてみました。
I'm presenting the case of a 63-year-old man with a one-month history of dyspnea and fever. He has no significant past medical history and denies any medications or allergies. Physical exam revealed fine crackles on auscultation, with a temperature of 37.7°C and a respiratory rate of 24/min. Differential diagnosis includes pneumonia, pulmonary embolism, and hypersensitivity pneumonitis, given his recent move to a potentially mold-ridden environment. We plan to review pending test results and consider further investigations, including pulmonary function tests and fungal cultures. 単語数:103 推定発表時間:0.7357142857142858分

日本語解説

患者は63歳の男性で、1ヵ月間にわたり息切れと発熱を経験しています。既往歴やアレルギーはなく、特に薬物も服用していません。身体診察では聴診で軽いラレス音が聞こえ、体温は37.7°C、呼吸数は24回/分でした。

この症例では、肺炎、肺塞栓症、過敏性肺臓炎が鑑別診断として考えられます。特に、彼が最近、かび臭のある環境に移ったという背景があり、過敏性肺臓炎の可能性もあります。我々は、検査結果をレビューし、肺機能検査やカビ培養検査などの追加の検査を考えています。

医学生として、どのような点に注意するべきなのか考えてみてください。例えば、呼吸器系の症状が主訴であるため、肺炎や肺塞栓症のような呼吸器系の疾患がまず考えられます。また、過敏性肺臓炎も鑑別診断として考えられますが、最近の環境の変化が関与している可能性があります。我々は、検査結果を待ちつつ、さらなる検査を計画し、患者を適切に対応する必要があります。

単語解説

単語解説
As a seasoned American attending physician, I'd be happy to help you with that. Here's a list of clinical English vocabulary and abbreviations used in the case presentation, along with brief Japanese explanations:

Dyspnea: ドスピーネア (呼吸困難)
Difficulty breathing or shortness of breath.
Auscultation: オースカルテイション (聴診)
Listening to internal sounds of the body using a stethoscope.
Crackles: クラッケルズ (ラ音)
Abnormal sounds heard during auscultation, often indicating lung disease.
Respiratory rate: 呼吸率 (RR)
The number of breaths taken per minute.
Differential diagnosis: 差異診断 (DDx)
A list of possible diagnoses that could explain a patient's symptoms.
Pneumonia: 肺炎
Inflammation of the lungs, often caused by infection.
Pulmonary embolism: 肺塞栓症 (PE)
A blockage of an artery in the lungs, often caused by a blood clot.
Hypersensitivity pneumonitis: 過敏性肺炎 (HP)
Inflammation of the lungs due to an allergic reaction to an inhaled substance.
Pulmonary function tests: 肺機能検査 (PFTs)
Tests to assess lung function, such as spirometry and lung volume measurements.
Fungal cultures: 真菌培養
Laboratory tests to identify fungal infections.
I hope this helps you better understand the case presentation!

医学用語解説AI

Coze : LLMアプリを作れるもう一つの方法

  • DifyのようなLLMアプリやBot、ワークフローが作成できるサービス
  • LINEやDiscord、Slackなどとの連携が簡単なのが特徴
  • 7/3まで完全無料で使えたが、現在は毎日クレジットが渡されるようになった
  • Difyのようなローカルでの使用はできない

英語医学用語の解説AIを作成してみました

LINEのチャットボットまで作成しましたが、無料枠を使い切ってしまったため試行はできていません

Cozeのサイトのデバックモードで試してみました。

GHDについて
  growth hormone deficiency
Explanation
Sure, I'd be happy to explain growth hormone deficiency to you in detail.
Growth hormone deficiency (GHD) is a condition in which the pituitary gland, a small gland located at the base of the brain, does not produce enough growth hormone. This hormone, also known as somatotropin, is responsible for promoting growth, muscle and bone strength, and the distribution of body fat.
GHD can affect people of all ages, including infants, children, and adults. In children, GHD can result in poor growth, meaning they grow less than about 1.4 inches in height per year after their third birthday. Other symptoms in children may include a younger-looking face, impaired hair and nail growth, delayed tooth development, and delayed puberty.
In adults, GHD can cause a variety of symptoms, including reduced sense of well-being, anxiety and/or depression, decreased energy levels, increased body fat (especially around the belly), decreased muscle tone, decreased bone density (which can lead to osteoporosis), insulin resistance (which can lead to type 2 diabetes), and increased levels of LDL-cholesterol and triglycerides (which increases the risk of heart disease).
There are different types and causes of GHD. Congenital GHD is present from birth and is usually due to a genetic mutation or structural issues in the baby's brain. Acquired GHD occurs later in life and is often the result of damage to the pituitary gland, which can be caused by conditions such as pituitary tumors, radiation therapy, head injury, or infections.
To diagnose GHD, healthcare providers may review the patient's medical history and growth charts, perform blood tests to measure growth hormone levels, and order imaging tests such as an MRI to evaluate the pituitary gland.
The main treatment for GHD is synthetic growth hormone injections, which are given at home. Children and adults with GHD often need daily injections. Treatment is long-term and may last for several years. It is important to regularly see a healthcare provider to monitor the effectiveness of the treatment and make any necessary adjustments.
Overall, the prognosis for individuals with GHD is generally good with proper treatment. Children who receive treatment early have a better chance of reaching near-normal adult height. Adults with GHD can lead a healthy life if the condition is treated properly. However, if left untreated, GHD can lead to complications such as short stature, delayed puberty, increased risk of heart disease and stroke, and higher risk of developing osteoporosis.
I hope this explanation helps you understand growth hormone deficiency better. If you have any further questions, feel free to ask.
日本語解説
Growth hormone deficiency (GHD): 成長ホルモン欠乏症。脳の基底部にある小さな下垂体が十分な成長ホルモンを分泌しない状態のこと。
Pituitary gland: 下垂体。脳の基底部にある小さな腺体で、様々なホルモンを分泌する役割がある。
Somatotropin: ソマトトロピン。成長ホルモンの別名で、成長促進、筋肉と骨の強さ、体脂肪の分布を促進する役割がある。
Infants: 幼児。生後1ヶ月から1歳までの赤ちゃんのこと。
Children: 子供。1歳から12歳までの子どものこと。
Adults: 成人。12歳以上の人のこと。
Poor growth: 成長不良。成長が遅く、3歳の誕生日以降に年間約1.4インチ以下しか身長が伸びない状態のこと。
Hair and nail growth: 髪や爪の成長。髪や爪が遅く成長する状態のこと。
Delayed tooth development: 歯の発育の遅れ。歯の生えるタイミングが遅れる状態のこと。
Delayed puberty: 思春期の遅れ。性的成熟が遅れる状態のこと。
Sense of well-being: 心地よさの感覚。心地良い感じの感覚のこと。
Anxiety: 不安。心配や不安の感情のこと。
Depression: うつ病。気分の落ち込みや無気力感などの症状が続く状態のこと。
Energy levels: エネルギーレベル。体のエネルギーの量や活力のこと。
Body fat: 体脂肪。体に蓄積された脂肪のこと。
Belly: お腹。腹部のこと。
Muscle tone: 筋肉のトーン。筋肉の状態や緊張度のこと。
Bone density: 骨密度。骨の強度や密度のこと。
Osteoporosis: 骨粗鬆症。骨の量や質が低下し、骨折しやすくなる状態のこと。
Insulin resistance: インスリン抵抗性。インスリンの効果が低下し、血糖値のコントロールが難しくなる状態のこと。
LDL-cholesterol: LDLコレステロール。悪玉コレステロールのことで、動脈硬化や心臓病のリスクを高める。
Triglycerides: トリグリセリド。脂質の一種で、高血脂症や心臓病のリスクを高める。
Congenital GHD: 先天性成長ホルモン欠乏症。生まれつきのGHDで、遺伝子の変異や脳の構造的な問題が原因となることが多い。
Acquired GHD: 後天性成長ホルモン欠乏症。後に発症するGHDで、下垂体腺の損傷が原因となることが多い。下垂体腺の損傷は、下垂体腫瘍、放射線療法、頭部外傷、感染症などによって引き起こされることがある。
Blood tests: 血液検査。血液中の成長ホルモンの量を測定するための検査。
MRI: 磁気共鳴画像法。体内の組織や臓器の詳細な画像を得るための検査方法。
Synthetic growth hormone: 合成成長ホルモン。人工的に作られた成長ホルモンのこと。
Injections: 注射。皮下または筋肉に薬物を注入すること。
Prognosis: 予後。病気の進行や結果の見通しや予測のこと。
Short stature: 小身。身長が低い状態のこと。
Complications: 合併症。病気や状態の進行によって引き起こされる追加の問題や症状のこと

Game Master AIの作成

AI Agentsについて

LLMが作成した回答の推敲もLLMが行うことでより良い回答を得る技術

一般的な定義としては、自律的に考えて行動して何かの目標を達成しようとするシステム

LangGraphとは

  • PythonでAI Agentsを作成できるツール
  • コーディングで作成するため、Difyよりも難易度は高めだが、より自由度は高い
  • ショートプレゼン提案AIや他のLLMを使ったシステム構築に使える

LangGraphの練習

条件分岐やRAGなどを練習するために、TRPGのGMを作成してみることにしました。

GMはTRPGのルールを熟知する必要があり、初心者には難しい印象です。そこで、LLMをGMにしてみることを考えています。

RAGでルールブックを取り込ませ、コードで各プレイヤーの能力値の管理やダイスの使用をさせれば、うまくいくのではないでしょうか?

一緒に開発してくださる方を募集中です。

プロンプトエンジニアリングまとめ

とりあえず基礎的なプロンプト手法をまとめます。

ペルソナを設定

使用する文体や専門用語を操作する方法です。

区切り記号

区切りとして適切な記号を使うことが重要です。Claudeでは特にXML tagsが有効で、ネストも可能です。

回答例

Zero-shotよりもone-shot、few-shotが有効です。

Step by step

Step by stepに考えさせると精度が向上します。

Chain-of-Thought Prompting

思考過程をLLMに吐き出させることで精度を向上させることができます。

LLMからの質問

追加で必要な情報を質問させることも有効です。

長文を扱うときのコツ

特にClaudeでは、documentは先に読ませ、引用箇所(scratchpad)を明示させることが重要です。特にClaudeでは、documentは先に読ませ、引用箇所を明示させることで、ハルシネーションリスクを下げられます。

Prompt Engineeringやその他の技術が学べるサイトです。様々なコースがあります。

まとめ

今回は主にLLM周りのことについて扱い、これらを用いた臨床留学時に応用できるツールの紹介を行いました。