オープンソース公開 · Apache-2.0
看護師が「皮蛇」と言えば、それは帯状疱疹です。健診名簿の「L-CT」は低線量の肺 CT で、頭部ではありません。健診オーダーの「鈣化」が尋ねているのは冠動脈カルシウムスコア。「傷寒」は多くの場合、便検体がまだ戻っていないという意味で、その病気のことではありません。こうした表記は台湾の記録に毎日現れますが、私たちが試した汎用モデルはほとんど読めませんでした。だから自分で訓練し、IlhaEmbed と名づけ、Apache-2.0 で Hugging Face に置きました。38.5 MB、CPU で動き、推論中にネットワークへ出ません。ナースステーションの古い PC でも動きます。
重みと完全な model card(評価方法・限界・引用形式)はこちら:huggingface.co/weemed/IlhaEmbed
なぜこれを作ったのか
8 年間、私たちは健診センター・企業の職場・地域拠点で同じことをしてきました。他人の手元にあるファイルを、使える健康記録に変えることです。そのファイルはどんな姿でしょうか。1 マスに「定期心內門診-戒菸」とあれば、それは 2 つの事実です。循環器内科のフォローが続いていること、そして禁煙。「成健」は成人予防保健。「檳榔」(ビンロウ咀嚼)は社会歴の欄で、喫煙・飲酒と並びます。
これらは誤字ではなく、台湾の医療現場が実際に使う書き方です。毎日生まれる記録に大量に現れ、しかし公開されている学習データにはほぼ存在しません。だから既製のモデルでは読めないのです。
読めなければ、1 マスずつ人が判断するしかありません。そして人が 1 マスずつ移すとき、間違いには誰も気づきません。間違ったマスは静かにカルテになります。
なぜ既製品を使わないのか
自分でモデルを訓練するのは時間がかかり、第一の選択ではありませんでした。まず市場で最も評価の高い中国語埋め込みモデルを検証し、3 つの問題が分かってから、自分で育てる判断をしました。
同じ課題・同じ検索プール・同じ採点方法で、汎用中国語モデルは 0.11〜0.21、私たちのモデルは 0.856。「皮蛇→帯状疱疹」のような課題では汎用モデルは 0.00〜0.05、つまり何も読めていません。
中国語圏で性能の高いオープンモデルの多くは中国由来です。台湾の公立病院は重要インフラのセキュリティ規制下にあり、調達ではモデルの出自を見ます。可か不可で、中間はありません。ベースに IBM Granite ModernBERT(Apache-2.0、米国由来)を選んだのは、出自を並べて確認できるようにするためです。
別の候補は私たちの検証で約 8 GB のメモリを消費しました。オンプレで動かない場合の代替は、カルテをクラウドに送ることです。その道は選びません。条件は 1 つ、オンプレ・CPU・ネットワーク不要。できあがったモデルは 38.5 MB、384 次元、int8 量子化です。
同一課題での正解率(訓練から除外、自己一致を排除)
| 課題 | IlhaEmbed | jina-v2-base-zh | ckip-base | bge-small-zh |
|---|---|---|---|---|
| 俗語(皮蛇→帯状疱疹) | 0.855 | 0.05 | 0.00 | 0.00 |
| 略語(L-CT→低線量胸部 CT) | 0.817 | 0.14 | 0.01 | 0.00 |
| 同格語(傷寒→腸チフス検査便検体) | 0.895 | 0.45 | 0.36 | 0.33 |
| 総合 | 0.856 | 0.21 | 0.13 | 0.11 |
| 台湾語(斷腦筋→脳卒中) | 0.943 | 0.64 | 0.56 | 0.50 |
IlhaEmbed の列は fp32 の数値です。実際に公開している int8 版は総合 0.815、台湾語 0.929。評価スクリプトは model card に同梱しているので、自分で走らせて確認できます。
ソブリン AI について
台湾語で話された一文が監査に耐える記録になるまでに、3 つの段階が必要です。聞き取る。用語を標準概念に戻す。国の標準に格納する。3 つとも、いまの台湾には揃っています。真ん中が、私たちが埋めた部分です。
Breeze-ASR-26
聞く — MediaTek Research の音声モデル。台湾語と台湾なまりを聞き取ります
IlhaEmbed
分かる — 本ページのモデル。現場の書き方を標準概念に戻します
TW Core FHIR
残す — 台湾衛生福利部の健康データ標準。記録が交換でき、監査できるように
ベースは IBM Granite ModernBERT(Apache-2.0、米国由来)で、この道のどこにも中国由来の要素はありません。重要インフラ規制下の機関では、これが使えるかどうかを決めます。
38.5 MB、int8、CPU のみ。GPU も API キーも不要で、推論中にネットワークへ出ません。患者データが機関のサーバールームを離れる必要はありません。
重みは Apache-2.0、ベースモデルも同じです。同じ仕事をしている会社も含めて、誰でもダウンロードし、改変し、自社製品に組み込めます。許可は不要です。
私たちは衛生福利部の TW Core FHIR に接続します。標準は公共財で、接続されてはじめて価値があります。
私たちの知る限り、これは台湾の臨床テキスト向けとして初めて公開された埋め込みモデルです。最後にならないことを願っています。
失敗も公開します
ある機関固有の略語をモデルに覚えさせたいとき、直感的な手はその文字列でファインチューニングすることです。計測して得た結論は、この道は通らない、そして理由は計算できる、というものでした。
小さなモデルを int8 に量子化すると、各ベクトルは一定量ゆらぎます。私たちの測定値は 0.44。一方、機関の略語の山から正しいものを選べるかは、1 位と 2 位の差にかかっていて、その中央値は 0.14 です。モデルは自分の誤差の内側で選んでいることになります。略語を重みに学習させても、その差はさらに縮むだけで、誤差は元のまま。だから調整するほど悪くなります。18 通りの構成(テンソル単位・チャネル単位の int8、fp16、混合精度、重み補間、QAT、量子化制約付き LoRA など)を試しましたが、導入できるサイズでフル精度に追いついたものは 1 つもありませんでした。
有効なのは、その知識を別の場所に置くことです。モデルは完全に凍結し、機関の語彙はモデルの外側、数 KB の対照表に持たせ、手前にゲートを置きます。既知の項目に十分近ければその標準概念に置き換え、近くなければ元のまま通す。だから対照表を足しても、もともと正しかったものが崩れることはありません。
教訓は一文にしました。量子化する前に、判断の余裕が量子化の誤差より大きいかを測ること。そうでなければ、重みに何をしても救えません。この一文と、行き止まりだったすべての試行は、公開の研究ログにあります。
公開中の同じ int8 モデル、対照表の有無(実際の機関略語 110 件)
| モデル単体 | 対照表あり | |
|---|---|---|
| 機関の略語(110 件) | 83/110 | 110/110 |
| 対照表に無い変形 | — | 20/22 |
| 一般的な臨床課題の総合 | 0.815 | 0.815(変化なし) |
| サイズ | 38.5 MB | 38.5 MB + 数 KB |
デモではありません
IlhaEmbed は以前使っていた汎用モデルを置き換えました。システムのイメージに同梱され、顧客自身の環境で、取り込むファイルの「この列は結局何なのか」を判断しています。
順序は意図的です。まず決定論的なコードが大多数の列を解決し、残りをモデルに渡し、しかも列ごとではなく 1 バッチでまとめて尋ねます。誰も判断できない数列だけが人の前に出ます。人が一度確認すれば記憶され、同じ形式のファイルは次回モデルさえ不要です。
0.856
臨床意味の総合。同一課題で最良の汎用中国語モデルは 0.21
38.5 MB
int8 ONNX、384 次元、CPU で動く
110/110
対照表併用時に認識できた機関略語
Apache-2.0
重み・方法・評価スクリプト・研究ログを公開
台湾のカルテの一行を読むために、私たちは自分でモデルを育てました。
報道関係者・研究者・同業者がそのまま使えます。重み、完全な model card、自分で走らせられる評価スクリプト、そして失敗も入った研究ログ。訓練用の生ペアは第三者の著作権を含むため再配布せず、公開するのは訓練済みの重みと方法です。
引用形式
IlhaEmbed: An Open Embedding Model for Taiwanese Clinical Text. WeeMed AI, 2026. https://huggingface.co/weemed/IlhaEmbed