読者です 読者をやめる 読者になる 読者になる

精度がなかなか上がらない→辞書の特徴について考える

R MeCab

DBCLSでバイト。指標のところは全部実装したので、ライフサイエンス辞書の単語を正解のものとして、RecallやPrecision、F値(自然言語処理のF値がなんでこういう式なのかを勉強しておかないと。。。)などを計算。が、ありえないほど精度が出なくてへこむ。テストデータとかでは指標をきちんと計算できているので、関数にはたぶん間違いがないと思うんだけど、データの扱いにたぶん問題がある。

ライフサイエンス辞書

ライフサイエンス辞書は自分が考えているような

  • バイオ系にしか出てこないようなもの
  • 複合名詞の集合

というようなものに必ずしもなっていない。例えば「トリチウム標識の」といった形容詞、「寛解する」といった動詞など対象にしていないものが結構入っている。ライフサイエンス辞書に出てくる単語の品詞構成をアバウトに知りたいなと思ったので、おもむろにRを起動。名詞が圧倒的に多いものの、動詞とかも結構含まれているようだ。というか、rapplyとか久しぶりに使ったぞ。

> library(RMeCab)
> table(rapply(sapply(read.csv("/Users/syou6162/dbcls/lsd/lsd-b040125.txt",sep="\t",header=FALSE)[,2][1:1000],RMeCabC),names))

  記号 形容詞   助詞 助動詞 接続詞 接頭詞   動詞   副詞   名詞 
    24      4    177     36      2     62    114     10   1662

また、「abbreviation」の訳語として「省略」というバイオ系に限らず出てくるようなものも入っている。というわけで、ライフサイエンス辞書のものをただただ使えばよい、という感じではいかない。

umls

また、id:theclaさんhttp://www.nlm.nih.gov/research/umls/online_learning/index.htmから用語がまとめられているようなファイルを作ってくださっていました。というわけでファイルをもらうなど。

ライフサイエンス辞書とumlsのデータの共通部分のところを正解データとすればどうにか使えるものになるかなあ、ということでやってみました。ライフサイエンス辞書の単語数が50000くらい、umlsのほうは単語数でいくと200000くらい(しかし、コンセプトのようなidが振られており、それのuniqを取ると50000くらいに。ノートとメモ帳だと同じidを振る、というような感じ)。共通部分を取ると10000くらいになりました。が、これでもだめ。。。

もっと辞書の特徴について見ていかないと

ライフサイエンス辞書のほうを見ていくと

  • C1^-/HCO_3^-交換体
  • 2',5'-オリゴアデニル酸ポリメラーゼ

とかいったもの*1が含まれて"いない"。umlsのほうにはこういうのが含まれているのだが、単純に共通集合を取ってしまうとこういうのは含まれなくなってしまう。名詞のsequenceを考えているので、こういうのは正解になっていて欲しいのだが、正解になっていないので、精度は上がりようがないというわけだ。うむむ。名詞取ってきた後に、こういうのは例外的に加える必要があるかなあ。

というわけで何を正解とするか、というところで色々考える必要がありそうである。正解データが与えられた上で精度の比較を、というようなものではないので、考えるところが増えるといえばそうなのがだ、重要なところなのでしっかりやらないと。

そういえば

id:blanc_et_noirも6月からDBCLSにきていて、テキストチーム(?)に。蛋白質核酸酵素全文検索のクエリ展開の付近をやるらしいけど、辞書がととのってないとなかなかできないことがあるよね、ということなので、なんとか早めに成果らしきものを出したいなあ。

*1:どういう働きをするものなのかは分からないが