SlideShare une entreprise Scribd logo
1  sur  54
Télécharger pour lire hors ligne
ナイーブベイズによる
   言語判定
       2010/9/25
中谷 秀洋@サイボウズ・ラボ
  id:n_shuyo / @shuyo
Introduction
言語判定
• 不えられた文書が何語で書かれたものか判定
 – 英語/スペイン語/日本語/中国語(繁体・簡体)/アラビア語/……
 – 文字コードの判定を同時に行うこともあり(今回は対象外)
• 利用シーン
 – 言語の絞り込み付で検索したい
 – 言語別のフィルタを適用したい(SPAMフィルタとか)
   • Web本文抽出でも言語固有の特徴量を使った
• 利用対象
 – Web検索エンジン
   • Apache Nutch ではクローラに言語判定モジュールが付属
 – 掲示板                       グローバル化!
   • 例:日英中越入り交じりの書き込み
自分で作らなくちゃダメ?
• 言語判定ライブラリは数少ない
 – ニーズが限られている?
   • Web検索だけ? でもこれからはグローバル化の時代!
 – コーパス/モデルの構築が高コスト
   • 対象言語の知識がどうしてもある程度かなり必要

• 対応言語数が少ない。精度が低い
 – おおむね10言語程度。アジア系サポートなし
 – “Thank you. ありがとうございます”
   • → 「タガログ語かチェコ語かスロバキア語です」
Related Works
既存の言語判定サービス
• Google AJAX Language API
   – 短いテキストでも比較的的確に判定&対応言語も多い
   – 最も可能性の高い言語を1つだけ返す
   – Web API でいい&非商用利用なら鉄板か
       • http://code.google.com/intl/lt/apis/ajaxlanguage/documentation/
       • http://www.google.com/uds/samples/language/detect.html
• G2LI (Global Information Infrastructure Laboratory's
  Language Identifier)
   – オンラインデモのみ
       • http://gii.nagaokaut.ac.jp:8080/g2liWebHome/index.jsp
• PetaMem Language Identification
   – オンラインデモのみ
       • http://nlp.petamem.com/eng/nlp/langident.mpl
既存の言語判定ライブラリ
•   Lingua::LanguageGuesser
    – Perl 実装。60カ国語対応。文字コードもあわせて判定
    – 類似度ベースゆえ、評価結果は相対値で得られる
    – テキスト分類器の実装 TextCat をベース
       • http://gensen.dl.itc.u-tokyo.ac.jp/LanguageGuesser/
• NGramJ
    – Java の言語判定ライブラリ。LGPL
    – Executable Jar で配布されているので、ダウンロードして即、コマンドラ
      インから実行してみることが可能。
    – Lingua::LanguageGuesser と同じく TextCat がベース。
    – 用意されているプロファイルが少なく、標準で対応している言語や文字
      コードが少ない(UTF-8 は対応無し)
       • http://ngramj.sourceforge.net/
言語判定の論文 (1)
•   [Dunning 1994] Statistical Identification of Language
     – 英西の2言語、5万件の学習データで 正解率は 92%(20bytes)、99%(500bytes)
     – Markov モデルによる識別。おそらく学習コストがめちゃめちゃ高い。
     – 確率的言語識別では多分一番引用数が多い論文。
•   [Grefenstette 1995] Comparing two language identification schemes
     – 欧文9言語、10~20語の入力で 99%
     – 手法は「 Trigram ごとの確率を求め、シーケンスの確率を求めて、一番大きいヤツ」と文章で書
       かかれているだけ。
•   [Sibun & Reynar 1996] Language identification: Examining the issues
     – 欧文18言語で、90%(テストデータ1行)、99%(テストデータ5行) ((注:単位は「行」))
     – 各言語の n-gram の確率分布をあらかじめ求めておき、対象とのKLダイバージェンスが一番小
       さいものをとる。
•   [Cavnar & Trenkle 1994] N-gram-based text categorization
     – 欧文8言語、正解率 98~99%(テストデータ 300bytes 前後)。
     – N-gram のランキングの類似度による判別。
言語判定の論文 (2)
•   [Giguet 1995] Multilingual sentence categorization according to language
     – 欧文4言語で error rate は 0.01%
     – 方式は「機能語(of とか)が出てきたら、その言語の尤度を増加させる」と書かれているだけ
     – テストセットは「集めてきた」と書かれているだけ
•   [Poutsma 2001] Applying Monte Carlo Techniques to Language
    Identification
     – trigramの確率を「加算」して比較。モンテカルロと言いつつ先頭から順に「サンプリング」
•   [Martins+ 2005] Language Identification in Web Pages
     – 1~5-gram+similarity。欧文12言語で 91%。イタリア語が 80%(スペイン語と間違う)
•   [AMINE+ 2010] Automatic Language Identification: An Alternative
    Unsupervised Approach Using a New Hybrid Algorithm
     – 不えられた「ドキュメントのセット」をクラスタ分類するものであり、未知のドキュメントの言語判別を
       するものではない
     – 基本 K-means だが、K を不えるのではなく人工蟻コロニーで推定する
やっぱり自分で作らなきゃダメみたい
• 使いやすいライブラリがない
• 速度が遅い
• 対応言語が少ない(特にアジア系)
• 類似度ベースのものが多い
 – 値を絶対評価できない


• (個人的に)確率的手法の方が好き♪
 – ナイーブベイズで十分じゃあないかなあ
Our Approach
ナイーブベイズによる文書分類
                                                                          本当は独立なわけ
• 文書 ������ = (������������ ) をカテゴリ ������������ に分類する問題                                      ないんだけどね!

  – 文書は単語 ������������ の集合と見なす(bag-of-words)
• ナイーブベイズ : カテゴリ毎の単語の出現確率を独立とする仮定
  – ������ ������ ������������ =      ������ ������   ������������ ������k     (独立の仮定から)
  – where ������(������������ |������) : カテゴリごとの単語の出現率
• 事後確率が最大となる ������k を文書 ������ のカテゴリと推定する
                   ������ ������ ������k ������ ������k
  – ������ ������k ������ =                          ∝ ������(������k )   ������ ������(������������ |������k )
                         ������ ������
  – where ������(������k ) : カテゴリごとの事前情報

• [宣伝] 詳細は gihyo.jp 「機械学習 はじめよう」第2回をご覧ください
  – http://gihyo.jp/dev/serial/01/machine-learning/0002
ナイーブベイズによる「言語判定」
• 「言語」をカテゴリとした文書分類を行う
 – 文書が「英語」に分類されるか、「日本語」に分類されるか判定
• 特徴量に単語ではなく「文字 n-gram」を使う
 – 正確には「Unicodeのコードポイント n-gram」 (≠単語/バイト)
 – 文字コードが判明していることを前提(特に Unicode とする)
   • アプリはテキストの文字コードは把握している
   • 文字コード判別が必要なら別途( ICU-4C など)


     □T h i s □                               単語の区切りを
                                               表す記号

             T    h      i     s    ←1-gram

       □T   Th    hi    is    s□    ←2-gram

            □Th   Thi   his   is□   ←3-gram
文字n-gramで言語判定ができる理由
• 各言語には固有の文字や綴り字の規則がある
 – アクセント付きの “é” はスペイン語、イタリア語などではよく使われ
   るが、英語では原則として用いない
 – “Z” で始まる単語はドイツ語には多いが、英語にはほとんど無い
 – “C”で始まる単語や “Th” という綴りは英語には多いがドイツ語に
   は少ない
• これら特徴に「確率」を設定し、文書全体について累積
                □C   □L   □Z    Th

        英語      0.75 0.47 0.02 0.74
        ドイツ語    0.10 0.37 0.53 0.03
        フランス語   0.38 0.69 0.01 0.01
言語判別の流れ
• 学習: 学習コーパスから ������(������������ |������k ) を求める
  – 最尤推定(MLE)なら

                     ������������ の文書内のXi の頻度
    ������ ������������ ������������ =
                        言語������������の特徴量数
• 判定: 対象テキストから ������ ������k ������ を求める
                                                           (m) を更新
  – テキストから特徴量 ������������ を抽出、 ������ ������k ������
                (m+1)                 m
  – ������ ������k ������           ∝ ������ ������k ������       ⋅ ������ ������������ ������������
  – 正規化し、最大確率が閾値(0.99999)を超えたら終了
Preparation
「文字」について予習
• 世界で使われる文字は大きく4つに分類される
 – アルファベット(ギリシャ文字系)
 – アラム文字系
 – ブラーフミー文字系
 – 漢字系
言語系統と「文字」
• 文字は必ずしも言語の系統と関係しない
 – 宗教上の理由
  • カソリック→ラテン文字、ギリシャ正教→キリル文字
  • イスラム→アラビア文字、ヒンズー→デーヴァナーガリー
 – 「近代化」
  • 旧体制との結びつきを連想させる文字を捨てる
  • 普及した文字の方が、学習やコミュニケーションのコスト
    が低い
言語-文字対応表(1)
• 同じ枠内の言語間は判別しにくい傾向がある
言語-文字対応表(2)
• 文字と語派がほぼ単独対応する言語
 – 文字=言語なので、比較的容易に判別可能
アルファベット(ギリシャ文字系)
• ギリシャ文字から派生(alpha-beta)
• 主な特徴(文字ごとに例外有り)
 – 子音文字と母音文字を個別に持つ
   • 表音文字として非常に優秀。多くの言語が「アルファベット表
     記」を持つ
 – 大文字と小文字の区別がある
   • ギリシャ文字とラテン文字に分岐したあと、両方に大文字小
     文字の区別が出来た
 – 文字種は 30 前後
 – UTF-8でも2バイト以下で表現可能
   • コードブロックの「いい場所」を取っているw
Αλφάβητο
• 代表的な文字
 – ラテン文字:ローマ・カソリックとともに普及
  • アメリカ、ヨーロッパなど、最も多くの国・言語で使われる
  • 意外なところではアフリカ諸国、東南アジアにも多い
    – 植民地の文字をラテン文字表記に変えさせたり
  • アルファベットに存在しない音があれば、付加記号を付
    けて文字を増やす(拡張ラテン文字)
 – キリル文字: ギリシャ正教とともに普及
  • ロシア、東欧を中心に
  • 旧・現 社会主義国にも多い(旧ソ連の仕業)
アラム文字系
• 中東で普及したアラム文字から派生
                                      これは2文字!
• 主な特徴
 – 右から左に続き字で書く
   • 続き字の頭・真ん中・お尻で字形が変わる
   • 活字より手書きをよしとする(新聞も手書き)
   • 慣れないとどこからどこまでが1文字かわからない
                                         ‫ال‬
 – 基本的に子音のみで表記される(「アブジャド」)
   • 単語の意味によって母音がわかるので、知らない単語は読めない
   • 文字がないせいか、母音が少ない(アラビア語は a/i/u のみ)
   • クルアーンや子供向け文章は母音記号付き(「ふりがな」みたい)
 – 文字種は 30 前後
   • Unicodeでは派生文字(後述)も Arabic ブロックに含むため、コードポイ
     ント数は256
‫أبجدية عربية‬
• 代表的な文字
 – アラビア文字: イスラムの文字として普及
  • イスラムの聖典クルアーン(コーラン)は「アラビア語のみ」。翻
    訳されたものはクルアーンではない
  • そのためイスラム圏の諸語では、アラビア文字に数文字加え
    た派生文字が使われる傾向(ペルシャ文字、ウルドゥー文字)
 – ヘブライ文字:ユダヤ民族の文字
  • ヘブライ語:日常語としては一度消滅。20世紀に復活
  • 世界各地のユダヤ人が現地の言葉をヘブライ文字で表す
    – イディッシュ語 ≒ ドイツ語のヘブライ文字表記
    – ジュデズモ語 ≒ スペイン語のヘブライ文字表記
ブラーフミー文字系
• 古代インド発祥のブラーフミー文字から派生
• 主な特徴(文字ごとに例外有り)
 – 潜在母音を持つ子音文字+母音付加文字+補助記
   号(「アブギダ」)
   • 母音なし=「ア」。母音文字付き=「イ」など他の母音
   • 日本語の「五十音」もインドの文字体系を参考に
 – 言語ごとに固有の文字が作られる
   • 「丸くてかわいらしい」ものがおおい      తెలుగు
   • 固有の数字文字を持つ          ๐๑๒๓๔๕๖๗๘๙
 – 文字種数は子音 30 前後、付加文字等 10~20
देवनागरी
• 代表的な文字
 – デーヴァナーガリー: ヒンズー教とともに普及
  • ブラーフミー系にしては珍しく複数の言語で使われる(それで
    も非常に少ないが)
 – 言語固有文字
  • 伝播先のインド国内や東南アジアで次々と独自の派生文字
    が作られる
  • テルグ文字、カンナダ文字、クメール文字、タイ文字、……
 – ハングル文字:朝鮮で作られた人造文字
  • 合字による音節文字の構成など、パスパ文字を参考に制定
    されたと考えられる
漢字系
• 甲骨文字(亀甲獣骨文字)の発展系
• 特徴
 – 現行文字としては唯一の表意文字
   • 言葉の全く異なる日本語と中国語でも、漢字を使えばある程
     度の意思疎通が可能
       – 「普通」は逆(口頭は通じるが筆談は×:ヒンディーとウルドゥー)

 – 文字種数は数万~数十万と膨大
   • 正確な数は「わからない」
   • 常用漢字(よく使われる字)というカテゴリーがある(他の文字
     にそんなのがあるわけない!)
汉字
• 代表的な文字
 – 漢字
  • 現在は中国語(簡体字・繁体字)と日本語のみ
  • 朝鮮での使用は事実上廃止(CJKなんだけど……)
  • ベトナム語(チュノム):漢字を表意・表音の両方で用いるという
    独特の体系。現在はラテン文字表記に

 – ひらがな、カタカナ:漢字から作られた表音文字
  • 現存する言語の中で、日本語は表意文字と表音文字の両方
    を使う唯一の言語
  • 全く同体系の2種類の表音文字を使い分けるのも日本語だけ
Prototype
言語判別の流れ(再掲)
• 学習: 学習コーパスから ������(������������ |������k ) を求める
  – 最尤推定(MLE)なら

                     ������������ の文書内のXi の頻度
    ������ ������������ ������������ =
                        言語������������の特徴量数
• 判定: 対象テキストから ������ ������k ������ を求める
                                                           (m) を更新
  – テキストから特徴量 ������������ を抽出、 ������ ������k ������
                (m+1)                 m
  – ������ ������k ������           ∝ ������ ������k ������       ⋅ ������ ������������ ������������
  – 正規化し、最大確率が閾値(0.99999)を超えたら終了
言語判定モジュール(プロトタイプ)
• 学習&判定を Ruby で実装して検証
 – 1~3-gram を特徴量として用いる
    • 頻度2回以下は足切り
    • 4-gram を加えると、精度が低下する(原因未調査)
 – 文字の正規化(後述)
 – 近似&加算スムージング(手抜き!)
                       document frequency+������
    • ������ ������������ ������������   =
                       言語������������のdocument数+V������
    • パラメータはα=1,2,5,10。確率を正規化してないので大きめ
 – http://github.com/shuyo/iir/tree/master/langdetect/
    • 学習済みモデルで、言語判定を試せます
            $ ruby ./filetest.rb [判定したいファイル]
評価(プロトタイプ)
• テスト方法
 – コーパス : Google News から22言語
   • RSSをクロールして収集
   • 学習用 兼 テスト用。学習用はランダムに 300件抽出
   • RSSの抜粋なのでデータの粒度(記事の長さ)が揃っている
   • ノイズが非常に少ない

• 学習後のモデルサイズ
 – JSON形式で出力して 1.2MB
   • gzip圧縮して 280KB
評価結果(プロトタイプ)
• 22言語平均で 98.6~99.7% の精度
プロトタイプの問題点
• コーパスに依存した作り
• Google Newsコーパスのpros/cons
  – ○データの粒度(記事あたりの長さ)が揃っている
  – ○ ノイズが少ない
    • 適当にやっても、そこそこいい精度!!
  – ○偏りの少ない表現を一箇所から拾える
    • ソースが複数ニュースサイト
  – ×未提供言語に対応できない(ペルシャ語などなど)
  – ×まとまった量の入手に手間&時間がかかる
  – ×コーパスを配布できない
Main Subject
言語判定ライブラリ for Java
• オープンソースとして公開(Apache License 2.0)
 – http://code.google.com/p/language-detection/
• プロトタイプ+コーパス変更
 – 学習コーパスに Wikipedia の abstract データベース
   ファイルを採用
    • Wikipedia は 273 言語に展開(2010/09 現在)
 – 特徴量に Jefferys-Peaks (ELE)
                       ������������ の文書内のXi の頻度+������
    • ������ ������������ ������������ =                         , where ������ = 0.5
                        言語������������ の特徴量数+V������
    • ������ ������������ ������������   > 10−4 で足切り
当初、まったく精度が出ない
• 初期版では平均精度が70%程度
 – 日本語、繁体字、ロシア語などが50%未満……
• 精度低下の要因:
 – (1) 学習コーパスのノイズ
 – (2) 学習コーパスの丌均一性
 – (3) 文字種の偏り
 – (4) 判定テキストのノイズ
(1) 学習コーパスのノイズ
• Wikipedia Abstract Database は意外とノイズだらけ
                          – abstract = 先頭1段落の抜粋

• 他言語での名称表記
  – 由来となる言語での正式名を併記。n-gram に他言語のも
    のが混ざる
  –   → 足切りで極力除外
• スタイル情報などの残留
  – 本来、独自タグで囲まれているのだが、Abstract
    Database ではタグのみ消えている(!!?)
  –   → 正規表現などで引っかけて、少しでも減らす
(2) 学習コーパスの不均一性
• 言語によって記事件数に大きな隔たり
 – 英語:340万件, イタリア語:72万件
 – デンマーク語:13万件, ソマリ語: 1400件
 – 特徴量の分母が異なるため、discount 項の効き
  方が言語によって異なってしまう

                     ������������ の文書内のXi の頻度+������
  • ������ ������������ ������������ =                         , where ������ = 0.5
                     言語������������の特徴量数+V������
 – → 頻度の平均を用いて、分母を統一
(3) 文字種の偏り
• 漢字:文字種が他言語の1000倍!
• コーパスに出現しない文字
 – Wikipedia で「谢」は使われない→ 「谢谢」が判定できない
 – 日本人の人名漢字も同様
 –   → 文字の正規化時に「常用漢字」を考慮(後述)
• 日本語と繁体字の誤判定問題
 – 確率を正規化すると、文字種が多い⇒確率小
     • 共通文字について、文字種の多い言語が丌利
     • アルファベットが混じっていると、負ける → ラテン文字ノイズ参照
 – 漢字はかなり共通+日本語にはひらがな&カタカナ
     • 漢字の日本語確率が下がりすぎ、繁体字判定されがち
 –   → 文字の正規化で解決(後述)
(4) 判定テキストのノイズ
• 言語に依存しない文字 → 単純に除去
  – URL やメールアドレス
  – 数字や記号(¥x21-¥x40, General Punctuation)
• ラテン文字ノイズ in 非ラテン文字
  – 非ラテン文字の中にも頻繁に出現
      • ある意味世界共通文字。でも精度低下の大きな要因
  –   → ラテン文字が2割以下なら除去
• ラテン文字ノイズ in ラテン文字
  – 略字、人名は言語の特徴を表さない
      • 特に人名はむしろ他の言語の特徴をもつことも
  –   → 全て大文字の単語は除去
  –   → 特徴サンプリングして、人名などの局所的な特徴の影響を低減
文字の正規化
• 文字を(言語判定の観点で)統一されたものに置き換え
 – 学習時・判定時の両方で行う
• そもそもなぜ正規化が必要?
 – ノイズ除去
   • 言語に依存しない記号・アラビア数字(しかも高頻度)
 – sparseness の解消
   • 特に文字セットが巨大な場合に重要(後述)
 – モデルの圧縮
   • 判定時のメモリ・速度が有利に


• 文字の正規化が最も困難(要:言語の知識)
文字の正規化(基本)
• “stop character” の除外
  – 数字や記号(¥x21-¥x40, General Punctuation 等)
• 特定の言語に対応する文字種の正規化
  – 文字の「綴り」を言語判定に使う必要がない
  – 文字種全体を代表となる1文字にまとめる
    • モデルの圧縮に効果大
       – ひらがな・カタカナ、特にハングル!
    • 頻度は小さいが、言語判定の決め手となる文字
       – ハングルの注音字母
文字の正規化(CJK漢字) (1)
• CJK漢字特有の問題
 – 学習コーパスに「たまたま出現しない文字」
   • 例: 「谢谢」、人名漢字
   • 解決案:「頻度が似ている漢字」でグルーピングし、それぞれ代表文
     字に正規化
   • ★よく使われる文字をできるだけカバーするクラスタを作る
 – 高頻度の共通文字で「負けている」と常に負ける
   • 例:「的」
     – 日本語、簡体字、繁体字で共通に使用。
     – 日本語はひらがなカタカナもあるため、漢字の確率は低い
     – 「的」を含むグループの確率の差のせいで、繁体字に判定されやすい
   • ★できるだけ細かいクラスタを作りたい
文字の正規化(CJK漢字) (2)
• 大きすぎず、小さすぎない漢字クラスタを作る
 – (1) K-meansによるクラスタ分類
   • Wikipedia および Google News での tf-idf を特徴量とする
      – 頻度をそのまま用いるよりはるかによい結果になる
   • K=50 (アルファベットの個数 52 に合わせた)
 – (2) 「常用漢字」による分類
   • 簡体字: 现代汉语常用字表(3500字)
   • 繁体字: Big5第1水準(5401字、「常用国字標準字体表」4808字を含む)
   • 日本語: 常用漢字(2136字)+ JIS 第1水準(2965字) = 2998字
      – 常用漢字だけでは、氏名や地名の漢字がほとんど入っていないため

 – K-means のクラスタおよび、各「常用漢字」で集合積をとり、130のク
   ラスタを作成
   • +手動による補正……
文字の正規化(アラビア文字)
• 問題発生:ペルシャ語の判別が全滅(全てアラビア語に!!)
  – 同じアラビア文字だが語派が全く違う→判別は容易なはず
• 原因:高頻度で使われる yeh のコードが異なる
  – 学習コーパス(Wikipedia)では ‫¥( ی‬u06cc, Farsi yeh) が(正しく)
    使われている
  – テストコーパス(Google News)では ‫¥(ي‬u064a, Arabic yeh)
     • 推測:アラビア語の文字コード CP-1256 には ¥u06cc にマッピングされ
       る文字がないため、¥u064aで代用する手法が現場で定着している?
• 対策: ¥u06cc を ¥u064a に正規化
ペルシア語ではye( ‫)ی‬の独立形・右接形には識別点を付けないが,付けているものをよく見かけ
る。これはアラビア語キーボードでペルシア語を入力したときによく起こる問題である。また,OS
やブラウザーなどの環境によってはこの文字が正しく出ないため,ウェブでは確信犯的にアラビ
ア語のyā’( ‫)ي‬を使っていることが多い。
                             「アラビア語系文字の基礎知識」より
Experiments
評価
• 学習
  – 対象言語数: 49言語
    • Wikipedia にはもっと言語多いのでは?
        – テストデータが用意できるもの
        – 似すぎていて判別できないものを対象外
    • 各言語プロファイルのサイズは30KB前後(JSON)
• テスト
  – コーパス:Google News + 様々なニュースサイトの RSS
    • マイナーな言語は RSS を配信しているニュースサイトを見つけるだ
      けでも大変……
  – 各言語ごとにランダムに 200件抽出
評価結果 (1)
      言語      データ件数    正解数(率)                      内訳
af   アフリカーンス語    200   199 (99.50%)    en=1, af=199
ar   アラビア語       200   200 (100.00%)   ar=200
bg   ブルガリア語      200   200 (100.00%)   bg=200
bn   ベンガル語       200   200 (100.00%)   bn=200
cs   チェコ語        200   200 (100.00%)   cs=200
da   デンマーク語      200   179 (89.50%)    da=179, no=14, en=7
de   ドイツ語        200   200 (100.00%)   de=200
el   ギリシア語       200   200 (100.00%)   el=200
en   英語          200   200 (100.00%)   en=200
es   スペイン語       200   200 (100.00%)   es=200
fa   ペルシア語       200   200 (100.00%)   fa=200
fi   フィンランド語     200   200 (100.00%)   fi=200
fr   フランス語       200   200 (100.00%)   fr=200
gu   グジャラート語     200   200 (100.00%)   gu=200
he   ヘブライ語       200   200 (100.00%)   he=200
hi   ヒンディー語      200   200 (100.00%)   hi=200
hr   クロアチア語      200   200 (100.00%)   hr=200
hu   ハンガリー語      200   200 (100.00%)   hu=200
id   インドネシア語     200   200 (100.00%)   id=200
it   イタリア語       200   200 (100.00%)   it=200
ja   日本語         200   200 (100.00%)   ja=200
kn   カンナダ語       200   200 (100.00%)   kn=200
ko   朝鮮語(韓国語)    200   200 (100.00%)   ko=200
mk   マケドニア語      200   200 (100.00%)   mk=200
ml   マラヤーラム語     200   200 (100.00%)   ml=200
評価結果 (2)
       言語        データ件数      正解数(率)                         内訳
  mr マラーティー語         200    200 (100.00%)   mr=200
  ne ネパール語           200    200 (100.00%)   ne=200
  nl  オランダ語          200    200 (100.00%)   nl=200
  no ノルウェー語          200    199 (99.50%)    da=1, no=199
  pa  パンジャーブ語        200    200 (100.00%)   pa=200
  pl  ポーランド語         200    200 (100.00%)   pl=200
  pt  ポルトガル語         200    200 (100.00%)   pt=200
  ro  ルーマニア語         200    200 (100.00%)   ro=200
  ru  ロシア語           200    200 (100.00%)   ru=200
  sk  スロバキア語         200    200 (100.00%)   sk=200
  so ソマリ語            200    200 (100.00%)   so=200
  sq  アルバニア語         200    200 (100.00%)   sq=200
  sv  スウェーデン語        200    200 (100.00%)   sv=200
  sw スワヒリ語           200    200 (100.00%)   sw=200
  ta  タミル語           200    200 (100.00%)   ta=200
  te  テルグ語           200    200 (100.00%)   te=200
  th  タイ語            200    200 (100.00%)   th=200
   tl タガログ語          200    200 (100.00%)   tl=200
  tr  トルコ語           200    200 (100.00%)   tr=200
  uk ウクライナ語          200    200 (100.00%)   uk=200
  ur  ウルドゥー語         200    200 (100.00%)   ur=200
  vi  ベトナム語          200    200 (100.00%)   vi=200
zh-cn 中国語(簡体字)       200    200 (100.00%)   zh-cn=200
zh-tw 中国語(繁体字)       200    200 (100.00%)   zh-tw=200
       合計           9800   9777 (99.77%)
Conclusion
まとめ
• 99.8% で 49言語の判定可能な言語判定ライブ
  ラリを開発
 – オープンソース
   • http://code.google.com/p/language-detection/
 – ドキュメントは鋭意整備中……
• 90%までは簡単。でも実用レベルは99.*%~
 – 理想:美しい理論で一発解答
 – 現実:どこまでも泥臭い工夫の固まり
• 文字かわいいよ
Open issues
• アラビア語の母音記号をどう扱う?
• 複数言語で記述された文書の言語判別
 – 現行は「文書全体の言語の確率」のみ
 – 「ここからここまでは○○語」は面白いが難しそう
• テキストにソースコードが入っていると……
参考文献
• 千野栄一編「世界のことば100語辞典 ヨーロッ
  パ編」
• 町田和彦編「図説 世界の文字とことば」
• 世界の文字研究会「世界の文字の図典」
• 町田和彦「ニューエクスプレス ヒンディー語」
• 中村公則「らくらくペルシャ語 文法から会話」
• 道広勇司「アラビア系文字の基礎知識」
 – http://moji.gr.jp/script/arabic/article01.html

Contenu connexe

Tendances

yans2022_hackathon.pdf
yans2022_hackathon.pdfyans2022_hackathon.pdf
yans2022_hackathon.pdfKosuke Yamada
 
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~nocchi_airport
 
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11Koichi Hamada
 
1 4.回帰分析と分散分析
1 4.回帰分析と分散分析1 4.回帰分析と分散分析
1 4.回帰分析と分散分析logics-of-blue
 
情報検索とゼロショット学習
情報検索とゼロショット学習情報検索とゼロショット学習
情報検索とゼロショット学習kt.mako
 
[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network
[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network
[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified NetworkDeep Learning JP
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章Shushi Namba
 
経験ベイズ木(IBIS 2017)
経験ベイズ木(IBIS 2017)経験ベイズ木(IBIS 2017)
経験ベイズ木(IBIS 2017)Masashi Sekino
 
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-Koichiro Gibo
 
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...西岡 賢一郎
 
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章nocchi_airport
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布についてHiroshi Shimizu
 
多重代入法(Multiple Imputation)の発表資料
多重代入法(Multiple Imputation)の発表資料多重代入法(Multiple Imputation)の発表資料
多重代入法(Multiple Imputation)の発表資料Tomoshige Nakamura
 
(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説Hironori Washizaki
 
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアルYuya Unno
 
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会Shotaro Sano
 
Oracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslassoOracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslassoSatoshi Kato
 

Tendances (20)

yans2022_hackathon.pdf
yans2022_hackathon.pdfyans2022_hackathon.pdf
yans2022_hackathon.pdf
 
能動学習セミナー
能動学習セミナー能動学習セミナー
能動学習セミナー
 
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
StanとRでベイズ統計モデリング読書会 Chapter 7(7.6-7.9) 回帰分析の悩みどころ ~統計の力で歌うまになりたい~
 
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR  #11
「R言語による Random Forest 徹底入門 -集団学習による分類・予測-」 - #TokyoR #11
 
1 4.回帰分析と分散分析
1 4.回帰分析と分散分析1 4.回帰分析と分散分析
1 4.回帰分析と分散分析
 
情報検索とゼロショット学習
情報検索とゼロショット学習情報検索とゼロショット学習
情報検索とゼロショット学習
 
[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network
[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network
[DL輪読会]FOTS: Fast Oriented Text Spotting with a Unified Network
 
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
StanとRでベイズ統計モデリング読書会(Osaka.stan) 第6章
 
経験ベイズ木(IBIS 2017)
経験ベイズ木(IBIS 2017)経験ベイズ木(IBIS 2017)
経験ベイズ木(IBIS 2017)
 
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
Rubinの論文(の行間)を読んでみる-傾向スコアの理論-
 
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
ブラックボックスからXAI (説明可能なAI) へ - LIME (Local Interpretable Model-agnostic Explanat...
 
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
StanとRでベイズ統計モデリングに関する読書会(Osaka.stan) 第四章
 
自然言語処理
自然言語処理自然言語処理
自然言語処理
 
負の二項分布について
負の二項分布について負の二項分布について
負の二項分布について
 
多重代入法(Multiple Imputation)の発表資料
多重代入法(Multiple Imputation)の発表資料多重代入法(Multiple Imputation)の発表資料
多重代入法(Multiple Imputation)の発表資料
 
(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説(修正)機械学習デザインパターン(ML Design Patterns)の解説
(修正)機械学習デザインパターン(ML Design Patterns)の解説
 
予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル予測型戦略を知るための機械学習チュートリアル
予測型戦略を知るための機械学習チュートリアル
 
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
再帰型ニューラルネット in 機械学習プロフェッショナルシリーズ輪読会
 
主成分分析
主成分分析主成分分析
主成分分析
 
Oracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslassoOracle property and_hdm_pkg_rigorouslasso
Oracle property and_hdm_pkg_rigorouslasso
 

En vedette

第15回機械学習勉強会・説明用ノート
第15回機械学習勉強会・説明用ノート第15回機械学習勉強会・説明用ノート
第15回機械学習勉強会・説明用ノートEtsuji Nakai
 
Weighting of acoustic cues shifts to frication duration in identification of ...
Weighting of acoustic cues shifts to frication duration in identification of ...Weighting of acoustic cues shifts to frication duration in identification of ...
Weighting of acoustic cues shifts to frication duration in identification of ...Keiichi Yasu
 
破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜
破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜
破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜Keiichi Yasu
 
英語学習者のための発話自動採点システムの開発.
英語学習者のための発話自動採点システムの開発.英語学習者のための発話自動採点システムの開発.
英語学習者のための発話自動採点システムの開発.Yutaka Ishii
 
音声生成の基礎と音声学
音声生成の基礎と音声学音声生成の基礎と音声学
音声生成の基礎と音声学Akinori Ito
 
言語と知識の深層学習@認知科学会サマースクール
言語と知識の深層学習@認知科学会サマースクール言語と知識の深層学習@認知科学会サマースクール
言語と知識の深層学習@認知科学会サマースクールYuya Unno
 

En vedette (6)

第15回機械学習勉強会・説明用ノート
第15回機械学習勉強会・説明用ノート第15回機械学習勉強会・説明用ノート
第15回機械学習勉強会・説明用ノート
 
Weighting of acoustic cues shifts to frication duration in identification of ...
Weighting of acoustic cues shifts to frication duration in identification of ...Weighting of acoustic cues shifts to frication duration in identification of ...
Weighting of acoustic cues shifts to frication duration in identification of ...
 
破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜
破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜
破擦音生成時の解放に伴う破裂が摩擦音・破擦音識別に与える影響〜若年者と高齢者の比較〜
 
英語学習者のための発話自動採点システムの開発.
英語学習者のための発話自動採点システムの開発.英語学習者のための発話自動採点システムの開発.
英語学習者のための発話自動採点システムの開発.
 
音声生成の基礎と音声学
音声生成の基礎と音声学音声生成の基礎と音声学
音声生成の基礎と音声学
 
言語と知識の深層学習@認知科学会サマースクール
言語と知識の深層学習@認知科学会サマースクール言語と知識の深層学習@認知科学会サマースクール
言語と知識の深層学習@認知科学会サマースクール
 

Similaire à ナイーブベイズによる言語判定

言語モデル入門 (第二版)
言語モデル入門 (第二版)言語モデル入門 (第二版)
言語モデル入門 (第二版)Yoshinari Fujinuma
 
さくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッションさくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッションantibayesian 俺がS式だ
 
極大部分文字列を使った twitter 言語判定
極大部分文字列を使った twitter 言語判定極大部分文字列を使った twitter 言語判定
極大部分文字列を使った twitter 言語判定Shuyo Nakatani
 
Chainer with natural language processing hands on
Chainer with natural language processing hands onChainer with natural language processing hands on
Chainer with natural language processing hands onOgushi Masaya
 
第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッションantibayesian 俺がS式だ
 
Ism npblm-20120315
Ism npblm-20120315Ism npblm-20120315
Ism npblm-20120315隆浩 安
 
言語資源と付き合う
言語資源と付き合う言語資源と付き合う
言語資源と付き合うYuya Unno
 
読解支援@2015 06-05
読解支援@2015 06-05読解支援@2015 06-05
読解支援@2015 06-05sekizawayuuki
 
[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...
[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...
[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...Hayahide Yamagishi
 
Zipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPZipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPShuyo Nakatani
 
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)mametter
 
ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)
ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)
ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)智文 中野
 
A scalable probablistic classifier for language modeling: ACL 2011 読み会
A scalable probablistic classifier for language modeling: ACL 2011 読み会A scalable probablistic classifier for language modeling: ACL 2011 読み会
A scalable probablistic classifier for language modeling: ACL 2011 読み会正志 坪坂
 
Machine Learning Seminar (5)
Machine Learning Seminar (5)Machine Learning Seminar (5)
Machine Learning Seminar (5)Tomoya Nakayama
 
言語判定へのいざない
言語判定へのいざない言語判定へのいざない
言語判定へのいざないShuyo Nakatani
 
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジーLucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジーBasis Technology K.K.
 

Similaire à ナイーブベイズによる言語判定 (20)

言語モデル入門 (第二版)
言語モデル入門 (第二版)言語モデル入門 (第二版)
言語モデル入門 (第二版)
 
さくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッションさくさくテキストマイニング入門セッション
さくさくテキストマイニング入門セッション
 
Jacet2014ykondo_final
Jacet2014ykondo_finalJacet2014ykondo_final
Jacet2014ykondo_final
 
極大部分文字列を使った twitter 言語判定
極大部分文字列を使った twitter 言語判定極大部分文字列を使った twitter 言語判定
極大部分文字列を使った twitter 言語判定
 
Chainer with natural language processing hands on
Chainer with natural language processing hands onChainer with natural language processing hands on
Chainer with natural language processing hands on
 
第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション第三回さくさくテキストマイニング勉強会 入門セッション
第三回さくさくテキストマイニング勉強会 入門セッション
 
Ism npblm-20120315
Ism npblm-20120315Ism npblm-20120315
Ism npblm-20120315
 
Recommend scala
Recommend scalaRecommend scala
Recommend scala
 
言語資源と付き合う
言語資源と付き合う言語資源と付き合う
言語資源と付き合う
 
Emnlp読み会資料
Emnlp読み会資料Emnlp読み会資料
Emnlp読み会資料
 
読解支援@2015 06-05
読解支援@2015 06-05読解支援@2015 06-05
読解支援@2015 06-05
 
言語モデル入門
言語モデル入門言語モデル入門
言語モデル入門
 
[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...
[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...
[ACL2016] Achieving Open Vocabulary Neural Machine Translation with Hybrid Wo...
 
Zipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLPZipf? (ジップ則のひみつ?) #DSIRNLP
Zipf? (ジップ則のひみつ?) #DSIRNLP
 
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
超絶技巧プログラミングと Ruby 3.0 (大江戸 Ruby 会議 05 コミッタ LT)
 
ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)
ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)
ブートストラップ手法を用いた学習不用語の除去(言語と統計2015)
 
A scalable probablistic classifier for language modeling: ACL 2011 読み会
A scalable probablistic classifier for language modeling: ACL 2011 読み会A scalable probablistic classifier for language modeling: ACL 2011 読み会
A scalable probablistic classifier for language modeling: ACL 2011 読み会
 
Machine Learning Seminar (5)
Machine Learning Seminar (5)Machine Learning Seminar (5)
Machine Learning Seminar (5)
 
言語判定へのいざない
言語判定へのいざない言語判定へのいざない
言語判定へのいざない
 
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジーLucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
Lucene/Solr 用形態素解析システムのご紹介 ベイシス・テクノロジー
 

Plus de Shuyo Nakatani

画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15Shuyo Nakatani
 
Generative adversarial networks
Generative adversarial networksGenerative adversarial networks
Generative adversarial networksShuyo Nakatani
 
無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)Shuyo Nakatani
 
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)Shuyo Nakatani
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?Shuyo Nakatani
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRShuyo Nakatani
 
ドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoRドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoRShuyo Nakatani
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...Shuyo Nakatani
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章Shuyo Nakatani
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章Shuyo Nakatani
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyoShuyo Nakatani
 
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...Shuyo Nakatani
 
ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014Shuyo Nakatani
 
猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測Shuyo Nakatani
 
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5Shuyo Nakatani
 
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013Shuyo Nakatani
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門Shuyo Nakatani
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013Shuyo Nakatani
 
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...Shuyo Nakatani
 
Short Text Language Detection with Infinity-Gram
Short Text Language Detection with Infinity-GramShort Text Language Detection with Infinity-Gram
Short Text Language Detection with Infinity-GramShuyo Nakatani
 

Plus de Shuyo Nakatani (20)

画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
画像をテキストで検索したい!(OpenAI CLIP) - VRC-LT #15
 
Generative adversarial networks
Generative adversarial networksGenerative adversarial networks
Generative adversarial networks
 
無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)無限関係モデル (続・わかりやすいパターン認識 13章)
無限関係モデル (続・わかりやすいパターン認識 13章)
 
Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)Memory Networks (End-to-End Memory Networks の Chainer 実装)
Memory Networks (End-to-End Memory Networks の Chainer 実装)
 
人工知能と機械学習の違いって?
人工知能と機械学習の違いって?人工知能と機械学習の違いって?
人工知能と機械学習の違いって?
 
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoRRとStanでクラウドセットアップ時間を分析してみたら #TokyoR
RとStanでクラウドセットアップ時間を分析してみたら #TokyoR
 
ドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoRドラえもんでわかる統計的因果推論 #TokyoR
ドラえもんでわかる統計的因果推論 #TokyoR
 
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
[Yang, Downey and Boyd-Graber 2015] Efficient Methods for Incorporating Knowl...
 
星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章星野「調査観察データの統計科学」第3章
星野「調査観察データの統計科学」第3章
 
星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章星野「調査観察データの統計科学」第1&2章
星野「調査観察データの統計科学」第1&2章
 
言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo言語処理するのに Python でいいの? #PyDataTokyo
言語処理するのに Python でいいの? #PyDataTokyo
 
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
ACL2014 Reading: [Zhang+] "Kneser-Ney Smoothing on Expected Count" and [Pickh...
 
ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014ソーシャルメディアの多言語判定 #SoC2014
ソーシャルメディアの多言語判定 #SoC2014
 
猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測猫に教えてもらうルベーグ可測
猫に教えてもらうルベーグ可測
 
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5アラビア語とペルシャ語の見分け方 #DSIRNLP 5
アラビア語とペルシャ語の見分け方 #DSIRNLP 5
 
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
どの言語でつぶやかれたのか、機械が知る方法 #WebDBf2013
 
Active Learning 入門
Active Learning 入門Active Learning 入門
Active Learning 入門
 
数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013数式を綺麗にプログラミングするコツ #spro2013
数式を綺麗にプログラミングするコツ #spro2013
 
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
[Kim+ ICML2012] Dirichlet Process with Mixed Random Measures : A Nonparametri...
 
Short Text Language Detection with Infinity-Gram
Short Text Language Detection with Infinity-GramShort Text Language Detection with Infinity-Gram
Short Text Language Detection with Infinity-Gram
 

Dernier

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Danieldanielhu54
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...Toru Tamaki
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNetToru Tamaki
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものですiPride Co., Ltd.
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Yuma Ohgami
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムsugiuralab
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略Ryo Sasaki
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdftaisei2219
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A surveyToru Tamaki
 

Dernier (10)

Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By DanielPostman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
 
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
 
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システムスマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
 
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
 
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdfTSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
 
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
 

ナイーブベイズによる言語判定

  • 1. ナイーブベイズによる 言語判定 2010/9/25 中谷 秀洋@サイボウズ・ラボ id:n_shuyo / @shuyo
  • 3. 言語判定 • 不えられた文書が何語で書かれたものか判定 – 英語/スペイン語/日本語/中国語(繁体・簡体)/アラビア語/…… – 文字コードの判定を同時に行うこともあり(今回は対象外) • 利用シーン – 言語の絞り込み付で検索したい – 言語別のフィルタを適用したい(SPAMフィルタとか) • Web本文抽出でも言語固有の特徴量を使った • 利用対象 – Web検索エンジン • Apache Nutch ではクローラに言語判定モジュールが付属 – 掲示板 グローバル化! • 例:日英中越入り交じりの書き込み
  • 4. 自分で作らなくちゃダメ? • 言語判定ライブラリは数少ない – ニーズが限られている? • Web検索だけ? でもこれからはグローバル化の時代! – コーパス/モデルの構築が高コスト • 対象言語の知識がどうしてもある程度かなり必要 • 対応言語数が少ない。精度が低い – おおむね10言語程度。アジア系サポートなし – “Thank you. ありがとうございます” • → 「タガログ語かチェコ語かスロバキア語です」
  • 6. 既存の言語判定サービス • Google AJAX Language API – 短いテキストでも比較的的確に判定&対応言語も多い – 最も可能性の高い言語を1つだけ返す – Web API でいい&非商用利用なら鉄板か • http://code.google.com/intl/lt/apis/ajaxlanguage/documentation/ • http://www.google.com/uds/samples/language/detect.html • G2LI (Global Information Infrastructure Laboratory's Language Identifier) – オンラインデモのみ • http://gii.nagaokaut.ac.jp:8080/g2liWebHome/index.jsp • PetaMem Language Identification – オンラインデモのみ • http://nlp.petamem.com/eng/nlp/langident.mpl
  • 7. 既存の言語判定ライブラリ • Lingua::LanguageGuesser – Perl 実装。60カ国語対応。文字コードもあわせて判定 – 類似度ベースゆえ、評価結果は相対値で得られる – テキスト分類器の実装 TextCat をベース • http://gensen.dl.itc.u-tokyo.ac.jp/LanguageGuesser/ • NGramJ – Java の言語判定ライブラリ。LGPL – Executable Jar で配布されているので、ダウンロードして即、コマンドラ インから実行してみることが可能。 – Lingua::LanguageGuesser と同じく TextCat がベース。 – 用意されているプロファイルが少なく、標準で対応している言語や文字 コードが少ない(UTF-8 は対応無し) • http://ngramj.sourceforge.net/
  • 8. 言語判定の論文 (1) • [Dunning 1994] Statistical Identification of Language – 英西の2言語、5万件の学習データで 正解率は 92%(20bytes)、99%(500bytes) – Markov モデルによる識別。おそらく学習コストがめちゃめちゃ高い。 – 確率的言語識別では多分一番引用数が多い論文。 • [Grefenstette 1995] Comparing two language identification schemes – 欧文9言語、10~20語の入力で 99% – 手法は「 Trigram ごとの確率を求め、シーケンスの確率を求めて、一番大きいヤツ」と文章で書 かかれているだけ。 • [Sibun & Reynar 1996] Language identification: Examining the issues – 欧文18言語で、90%(テストデータ1行)、99%(テストデータ5行) ((注:単位は「行」)) – 各言語の n-gram の確率分布をあらかじめ求めておき、対象とのKLダイバージェンスが一番小 さいものをとる。 • [Cavnar & Trenkle 1994] N-gram-based text categorization – 欧文8言語、正解率 98~99%(テストデータ 300bytes 前後)。 – N-gram のランキングの類似度による判別。
  • 9. 言語判定の論文 (2) • [Giguet 1995] Multilingual sentence categorization according to language – 欧文4言語で error rate は 0.01% – 方式は「機能語(of とか)が出てきたら、その言語の尤度を増加させる」と書かれているだけ – テストセットは「集めてきた」と書かれているだけ • [Poutsma 2001] Applying Monte Carlo Techniques to Language Identification – trigramの確率を「加算」して比較。モンテカルロと言いつつ先頭から順に「サンプリング」 • [Martins+ 2005] Language Identification in Web Pages – 1~5-gram+similarity。欧文12言語で 91%。イタリア語が 80%(スペイン語と間違う) • [AMINE+ 2010] Automatic Language Identification: An Alternative Unsupervised Approach Using a New Hybrid Algorithm – 不えられた「ドキュメントのセット」をクラスタ分類するものであり、未知のドキュメントの言語判別を するものではない – 基本 K-means だが、K を不えるのではなく人工蟻コロニーで推定する
  • 10. やっぱり自分で作らなきゃダメみたい • 使いやすいライブラリがない • 速度が遅い • 対応言語が少ない(特にアジア系) • 類似度ベースのものが多い – 値を絶対評価できない • (個人的に)確率的手法の方が好き♪ – ナイーブベイズで十分じゃあないかなあ
  • 12. ナイーブベイズによる文書分類 本当は独立なわけ • 文書 ������ = (������������ ) をカテゴリ ������������ に分類する問題 ないんだけどね! – 文書は単語 ������������ の集合と見なす(bag-of-words) • ナイーブベイズ : カテゴリ毎の単語の出現確率を独立とする仮定 – ������ ������ ������������ = ������ ������ ������������ ������k (独立の仮定から) – where ������(������������ |������) : カテゴリごとの単語の出現率 • 事後確率が最大となる ������k を文書 ������ のカテゴリと推定する ������ ������ ������k ������ ������k – ������ ������k ������ = ∝ ������(������k ) ������ ������(������������ |������k ) ������ ������ – where ������(������k ) : カテゴリごとの事前情報 • [宣伝] 詳細は gihyo.jp 「機械学習 はじめよう」第2回をご覧ください – http://gihyo.jp/dev/serial/01/machine-learning/0002
  • 13. ナイーブベイズによる「言語判定」 • 「言語」をカテゴリとした文書分類を行う – 文書が「英語」に分類されるか、「日本語」に分類されるか判定 • 特徴量に単語ではなく「文字 n-gram」を使う – 正確には「Unicodeのコードポイント n-gram」 (≠単語/バイト) – 文字コードが判明していることを前提(特に Unicode とする) • アプリはテキストの文字コードは把握している • 文字コード判別が必要なら別途( ICU-4C など) □T h i s □ 単語の区切りを 表す記号 T h i s ←1-gram □T Th hi is s□ ←2-gram □Th Thi his is□ ←3-gram
  • 14. 文字n-gramで言語判定ができる理由 • 各言語には固有の文字や綴り字の規則がある – アクセント付きの “é” はスペイン語、イタリア語などではよく使われ るが、英語では原則として用いない – “Z” で始まる単語はドイツ語には多いが、英語にはほとんど無い – “C”で始まる単語や “Th” という綴りは英語には多いがドイツ語に は少ない • これら特徴に「確率」を設定し、文書全体について累積 □C □L □Z Th 英語 0.75 0.47 0.02 0.74 ドイツ語 0.10 0.37 0.53 0.03 フランス語 0.38 0.69 0.01 0.01
  • 15. 言語判別の流れ • 学習: 学習コーパスから ������(������������ |������k ) を求める – 最尤推定(MLE)なら ������������ の文書内のXi の頻度 ������ ������������ ������������ = 言語������������の特徴量数 • 判定: 対象テキストから ������ ������k ������ を求める (m) を更新 – テキストから特徴量 ������������ を抽出、 ������ ������k ������ (m+1) m – ������ ������k ������ ∝ ������ ������k ������ ⋅ ������ ������������ ������������ – 正規化し、最大確率が閾値(0.99999)を超えたら終了
  • 17. 「文字」について予習 • 世界で使われる文字は大きく4つに分類される – アルファベット(ギリシャ文字系) – アラム文字系 – ブラーフミー文字系 – 漢字系
  • 18. 言語系統と「文字」 • 文字は必ずしも言語の系統と関係しない – 宗教上の理由 • カソリック→ラテン文字、ギリシャ正教→キリル文字 • イスラム→アラビア文字、ヒンズー→デーヴァナーガリー – 「近代化」 • 旧体制との結びつきを連想させる文字を捨てる • 普及した文字の方が、学習やコミュニケーションのコスト が低い
  • 20. 言語-文字対応表(2) • 文字と語派がほぼ単独対応する言語 – 文字=言語なので、比較的容易に判別可能
  • 21. アルファベット(ギリシャ文字系) • ギリシャ文字から派生(alpha-beta) • 主な特徴(文字ごとに例外有り) – 子音文字と母音文字を個別に持つ • 表音文字として非常に優秀。多くの言語が「アルファベット表 記」を持つ – 大文字と小文字の区別がある • ギリシャ文字とラテン文字に分岐したあと、両方に大文字小 文字の区別が出来た – 文字種は 30 前後 – UTF-8でも2バイト以下で表現可能 • コードブロックの「いい場所」を取っているw
  • 22. Αλφάβητο • 代表的な文字 – ラテン文字:ローマ・カソリックとともに普及 • アメリカ、ヨーロッパなど、最も多くの国・言語で使われる • 意外なところではアフリカ諸国、東南アジアにも多い – 植民地の文字をラテン文字表記に変えさせたり • アルファベットに存在しない音があれば、付加記号を付 けて文字を増やす(拡張ラテン文字) – キリル文字: ギリシャ正教とともに普及 • ロシア、東欧を中心に • 旧・現 社会主義国にも多い(旧ソ連の仕業)
  • 23. アラム文字系 • 中東で普及したアラム文字から派生 これは2文字! • 主な特徴 – 右から左に続き字で書く • 続き字の頭・真ん中・お尻で字形が変わる • 活字より手書きをよしとする(新聞も手書き) • 慣れないとどこからどこまでが1文字かわからない ‫ال‬ – 基本的に子音のみで表記される(「アブジャド」) • 単語の意味によって母音がわかるので、知らない単語は読めない • 文字がないせいか、母音が少ない(アラビア語は a/i/u のみ) • クルアーンや子供向け文章は母音記号付き(「ふりがな」みたい) – 文字種は 30 前後 • Unicodeでは派生文字(後述)も Arabic ブロックに含むため、コードポイ ント数は256
  • 24. ‫أبجدية عربية‬ • 代表的な文字 – アラビア文字: イスラムの文字として普及 • イスラムの聖典クルアーン(コーラン)は「アラビア語のみ」。翻 訳されたものはクルアーンではない • そのためイスラム圏の諸語では、アラビア文字に数文字加え た派生文字が使われる傾向(ペルシャ文字、ウルドゥー文字) – ヘブライ文字:ユダヤ民族の文字 • ヘブライ語:日常語としては一度消滅。20世紀に復活 • 世界各地のユダヤ人が現地の言葉をヘブライ文字で表す – イディッシュ語 ≒ ドイツ語のヘブライ文字表記 – ジュデズモ語 ≒ スペイン語のヘブライ文字表記
  • 25. ブラーフミー文字系 • 古代インド発祥のブラーフミー文字から派生 • 主な特徴(文字ごとに例外有り) – 潜在母音を持つ子音文字+母音付加文字+補助記 号(「アブギダ」) • 母音なし=「ア」。母音文字付き=「イ」など他の母音 • 日本語の「五十音」もインドの文字体系を参考に – 言語ごとに固有の文字が作られる • 「丸くてかわいらしい」ものがおおい తెలుగు • 固有の数字文字を持つ ๐๑๒๓๔๕๖๗๘๙ – 文字種数は子音 30 前後、付加文字等 10~20
  • 26. देवनागरी • 代表的な文字 – デーヴァナーガリー: ヒンズー教とともに普及 • ブラーフミー系にしては珍しく複数の言語で使われる(それで も非常に少ないが) – 言語固有文字 • 伝播先のインド国内や東南アジアで次々と独自の派生文字 が作られる • テルグ文字、カンナダ文字、クメール文字、タイ文字、…… – ハングル文字:朝鮮で作られた人造文字 • 合字による音節文字の構成など、パスパ文字を参考に制定 されたと考えられる
  • 27. 漢字系 • 甲骨文字(亀甲獣骨文字)の発展系 • 特徴 – 現行文字としては唯一の表意文字 • 言葉の全く異なる日本語と中国語でも、漢字を使えばある程 度の意思疎通が可能 – 「普通」は逆(口頭は通じるが筆談は×:ヒンディーとウルドゥー) – 文字種数は数万~数十万と膨大 • 正確な数は「わからない」 • 常用漢字(よく使われる字)というカテゴリーがある(他の文字 にそんなのがあるわけない!)
  • 28. 汉字 • 代表的な文字 – 漢字 • 現在は中国語(簡体字・繁体字)と日本語のみ • 朝鮮での使用は事実上廃止(CJKなんだけど……) • ベトナム語(チュノム):漢字を表意・表音の両方で用いるという 独特の体系。現在はラテン文字表記に – ひらがな、カタカナ:漢字から作られた表音文字 • 現存する言語の中で、日本語は表意文字と表音文字の両方 を使う唯一の言語 • 全く同体系の2種類の表音文字を使い分けるのも日本語だけ
  • 30. 言語判別の流れ(再掲) • 学習: 学習コーパスから ������(������������ |������k ) を求める – 最尤推定(MLE)なら ������������ の文書内のXi の頻度 ������ ������������ ������������ = 言語������������の特徴量数 • 判定: 対象テキストから ������ ������k ������ を求める (m) を更新 – テキストから特徴量 ������������ を抽出、 ������ ������k ������ (m+1) m – ������ ������k ������ ∝ ������ ������k ������ ⋅ ������ ������������ ������������ – 正規化し、最大確率が閾値(0.99999)を超えたら終了
  • 31. 言語判定モジュール(プロトタイプ) • 学習&判定を Ruby で実装して検証 – 1~3-gram を特徴量として用いる • 頻度2回以下は足切り • 4-gram を加えると、精度が低下する(原因未調査) – 文字の正規化(後述) – 近似&加算スムージング(手抜き!) document frequency+������ • ������ ������������ ������������ = 言語������������のdocument数+V������ • パラメータはα=1,2,5,10。確率を正規化してないので大きめ – http://github.com/shuyo/iir/tree/master/langdetect/ • 学習済みモデルで、言語判定を試せます $ ruby ./filetest.rb [判定したいファイル]
  • 32. 評価(プロトタイプ) • テスト方法 – コーパス : Google News から22言語 • RSSをクロールして収集 • 学習用 兼 テスト用。学習用はランダムに 300件抽出 • RSSの抜粋なのでデータの粒度(記事の長さ)が揃っている • ノイズが非常に少ない • 学習後のモデルサイズ – JSON形式で出力して 1.2MB • gzip圧縮して 280KB
  • 34. プロトタイプの問題点 • コーパスに依存した作り • Google Newsコーパスのpros/cons – ○データの粒度(記事あたりの長さ)が揃っている – ○ ノイズが少ない • 適当にやっても、そこそこいい精度!! – ○偏りの少ない表現を一箇所から拾える • ソースが複数ニュースサイト – ×未提供言語に対応できない(ペルシャ語などなど) – ×まとまった量の入手に手間&時間がかかる – ×コーパスを配布できない
  • 36. 言語判定ライブラリ for Java • オープンソースとして公開(Apache License 2.0) – http://code.google.com/p/language-detection/ • プロトタイプ+コーパス変更 – 学習コーパスに Wikipedia の abstract データベース ファイルを採用 • Wikipedia は 273 言語に展開(2010/09 現在) – 特徴量に Jefferys-Peaks (ELE) ������������ の文書内のXi の頻度+������ • ������ ������������ ������������ = , where ������ = 0.5 言語������������ の特徴量数+V������ • ������ ������������ ������������ > 10−4 で足切り
  • 37. 当初、まったく精度が出ない • 初期版では平均精度が70%程度 – 日本語、繁体字、ロシア語などが50%未満…… • 精度低下の要因: – (1) 学習コーパスのノイズ – (2) 学習コーパスの丌均一性 – (3) 文字種の偏り – (4) 判定テキストのノイズ
  • 38. (1) 学習コーパスのノイズ • Wikipedia Abstract Database は意外とノイズだらけ – abstract = 先頭1段落の抜粋 • 他言語での名称表記 – 由来となる言語での正式名を併記。n-gram に他言語のも のが混ざる – → 足切りで極力除外 • スタイル情報などの残留 – 本来、独自タグで囲まれているのだが、Abstract Database ではタグのみ消えている(!!?) – → 正規表現などで引っかけて、少しでも減らす
  • 39. (2) 学習コーパスの不均一性 • 言語によって記事件数に大きな隔たり – 英語:340万件, イタリア語:72万件 – デンマーク語:13万件, ソマリ語: 1400件 – 特徴量の分母が異なるため、discount 項の効き 方が言語によって異なってしまう ������������ の文書内のXi の頻度+������ • ������ ������������ ������������ = , where ������ = 0.5 言語������������の特徴量数+V������ – → 頻度の平均を用いて、分母を統一
  • 40. (3) 文字種の偏り • 漢字:文字種が他言語の1000倍! • コーパスに出現しない文字 – Wikipedia で「谢」は使われない→ 「谢谢」が判定できない – 日本人の人名漢字も同様 – → 文字の正規化時に「常用漢字」を考慮(後述) • 日本語と繁体字の誤判定問題 – 確率を正規化すると、文字種が多い⇒確率小 • 共通文字について、文字種の多い言語が丌利 • アルファベットが混じっていると、負ける → ラテン文字ノイズ参照 – 漢字はかなり共通+日本語にはひらがな&カタカナ • 漢字の日本語確率が下がりすぎ、繁体字判定されがち – → 文字の正規化で解決(後述)
  • 41. (4) 判定テキストのノイズ • 言語に依存しない文字 → 単純に除去 – URL やメールアドレス – 数字や記号(¥x21-¥x40, General Punctuation) • ラテン文字ノイズ in 非ラテン文字 – 非ラテン文字の中にも頻繁に出現 • ある意味世界共通文字。でも精度低下の大きな要因 – → ラテン文字が2割以下なら除去 • ラテン文字ノイズ in ラテン文字 – 略字、人名は言語の特徴を表さない • 特に人名はむしろ他の言語の特徴をもつことも – → 全て大文字の単語は除去 – → 特徴サンプリングして、人名などの局所的な特徴の影響を低減
  • 42. 文字の正規化 • 文字を(言語判定の観点で)統一されたものに置き換え – 学習時・判定時の両方で行う • そもそもなぜ正規化が必要? – ノイズ除去 • 言語に依存しない記号・アラビア数字(しかも高頻度) – sparseness の解消 • 特に文字セットが巨大な場合に重要(後述) – モデルの圧縮 • 判定時のメモリ・速度が有利に • 文字の正規化が最も困難(要:言語の知識)
  • 43. 文字の正規化(基本) • “stop character” の除外 – 数字や記号(¥x21-¥x40, General Punctuation 等) • 特定の言語に対応する文字種の正規化 – 文字の「綴り」を言語判定に使う必要がない – 文字種全体を代表となる1文字にまとめる • モデルの圧縮に効果大 – ひらがな・カタカナ、特にハングル! • 頻度は小さいが、言語判定の決め手となる文字 – ハングルの注音字母
  • 44. 文字の正規化(CJK漢字) (1) • CJK漢字特有の問題 – 学習コーパスに「たまたま出現しない文字」 • 例: 「谢谢」、人名漢字 • 解決案:「頻度が似ている漢字」でグルーピングし、それぞれ代表文 字に正規化 • ★よく使われる文字をできるだけカバーするクラスタを作る – 高頻度の共通文字で「負けている」と常に負ける • 例:「的」 – 日本語、簡体字、繁体字で共通に使用。 – 日本語はひらがなカタカナもあるため、漢字の確率は低い – 「的」を含むグループの確率の差のせいで、繁体字に判定されやすい • ★できるだけ細かいクラスタを作りたい
  • 45. 文字の正規化(CJK漢字) (2) • 大きすぎず、小さすぎない漢字クラスタを作る – (1) K-meansによるクラスタ分類 • Wikipedia および Google News での tf-idf を特徴量とする – 頻度をそのまま用いるよりはるかによい結果になる • K=50 (アルファベットの個数 52 に合わせた) – (2) 「常用漢字」による分類 • 簡体字: 现代汉语常用字表(3500字) • 繁体字: Big5第1水準(5401字、「常用国字標準字体表」4808字を含む) • 日本語: 常用漢字(2136字)+ JIS 第1水準(2965字) = 2998字 – 常用漢字だけでは、氏名や地名の漢字がほとんど入っていないため – K-means のクラスタおよび、各「常用漢字」で集合積をとり、130のク ラスタを作成 • +手動による補正……
  • 46. 文字の正規化(アラビア文字) • 問題発生:ペルシャ語の判別が全滅(全てアラビア語に!!) – 同じアラビア文字だが語派が全く違う→判別は容易なはず • 原因:高頻度で使われる yeh のコードが異なる – 学習コーパス(Wikipedia)では ‫¥( ی‬u06cc, Farsi yeh) が(正しく) 使われている – テストコーパス(Google News)では ‫¥(ي‬u064a, Arabic yeh) • 推測:アラビア語の文字コード CP-1256 には ¥u06cc にマッピングされ る文字がないため、¥u064aで代用する手法が現場で定着している? • 対策: ¥u06cc を ¥u064a に正規化 ペルシア語ではye( ‫)ی‬の独立形・右接形には識別点を付けないが,付けているものをよく見かけ る。これはアラビア語キーボードでペルシア語を入力したときによく起こる問題である。また,OS やブラウザーなどの環境によってはこの文字が正しく出ないため,ウェブでは確信犯的にアラビ ア語のyā’( ‫)ي‬を使っていることが多い。 「アラビア語系文字の基礎知識」より
  • 48. 評価 • 学習 – 対象言語数: 49言語 • Wikipedia にはもっと言語多いのでは? – テストデータが用意できるもの – 似すぎていて判別できないものを対象外 • 各言語プロファイルのサイズは30KB前後(JSON) • テスト – コーパス:Google News + 様々なニュースサイトの RSS • マイナーな言語は RSS を配信しているニュースサイトを見つけるだ けでも大変…… – 各言語ごとにランダムに 200件抽出
  • 49. 評価結果 (1) 言語 データ件数 正解数(率) 内訳 af アフリカーンス語 200 199 (99.50%) en=1, af=199 ar アラビア語 200 200 (100.00%) ar=200 bg ブルガリア語 200 200 (100.00%) bg=200 bn ベンガル語 200 200 (100.00%) bn=200 cs チェコ語 200 200 (100.00%) cs=200 da デンマーク語 200 179 (89.50%) da=179, no=14, en=7 de ドイツ語 200 200 (100.00%) de=200 el ギリシア語 200 200 (100.00%) el=200 en 英語 200 200 (100.00%) en=200 es スペイン語 200 200 (100.00%) es=200 fa ペルシア語 200 200 (100.00%) fa=200 fi フィンランド語 200 200 (100.00%) fi=200 fr フランス語 200 200 (100.00%) fr=200 gu グジャラート語 200 200 (100.00%) gu=200 he ヘブライ語 200 200 (100.00%) he=200 hi ヒンディー語 200 200 (100.00%) hi=200 hr クロアチア語 200 200 (100.00%) hr=200 hu ハンガリー語 200 200 (100.00%) hu=200 id インドネシア語 200 200 (100.00%) id=200 it イタリア語 200 200 (100.00%) it=200 ja 日本語 200 200 (100.00%) ja=200 kn カンナダ語 200 200 (100.00%) kn=200 ko 朝鮮語(韓国語) 200 200 (100.00%) ko=200 mk マケドニア語 200 200 (100.00%) mk=200 ml マラヤーラム語 200 200 (100.00%) ml=200
  • 50. 評価結果 (2) 言語 データ件数 正解数(率) 内訳 mr マラーティー語 200 200 (100.00%) mr=200 ne ネパール語 200 200 (100.00%) ne=200 nl オランダ語 200 200 (100.00%) nl=200 no ノルウェー語 200 199 (99.50%) da=1, no=199 pa パンジャーブ語 200 200 (100.00%) pa=200 pl ポーランド語 200 200 (100.00%) pl=200 pt ポルトガル語 200 200 (100.00%) pt=200 ro ルーマニア語 200 200 (100.00%) ro=200 ru ロシア語 200 200 (100.00%) ru=200 sk スロバキア語 200 200 (100.00%) sk=200 so ソマリ語 200 200 (100.00%) so=200 sq アルバニア語 200 200 (100.00%) sq=200 sv スウェーデン語 200 200 (100.00%) sv=200 sw スワヒリ語 200 200 (100.00%) sw=200 ta タミル語 200 200 (100.00%) ta=200 te テルグ語 200 200 (100.00%) te=200 th タイ語 200 200 (100.00%) th=200 tl タガログ語 200 200 (100.00%) tl=200 tr トルコ語 200 200 (100.00%) tr=200 uk ウクライナ語 200 200 (100.00%) uk=200 ur ウルドゥー語 200 200 (100.00%) ur=200 vi ベトナム語 200 200 (100.00%) vi=200 zh-cn 中国語(簡体字) 200 200 (100.00%) zh-cn=200 zh-tw 中国語(繁体字) 200 200 (100.00%) zh-tw=200 合計 9800 9777 (99.77%)
  • 52. まとめ • 99.8% で 49言語の判定可能な言語判定ライブ ラリを開発 – オープンソース • http://code.google.com/p/language-detection/ – ドキュメントは鋭意整備中…… • 90%までは簡単。でも実用レベルは99.*%~ – 理想:美しい理論で一発解答 – 現実:どこまでも泥臭い工夫の固まり • 文字かわいいよ
  • 53. Open issues • アラビア語の母音記号をどう扱う? • 複数言語で記述された文書の言語判別 – 現行は「文書全体の言語の確率」のみ – 「ここからここまでは○○語」は面白いが難しそう • テキストにソースコードが入っていると……
  • 54. 参考文献 • 千野栄一編「世界のことば100語辞典 ヨーロッ パ編」 • 町田和彦編「図説 世界の文字とことば」 • 世界の文字研究会「世界の文字の図典」 • 町田和彦「ニューエクスプレス ヒンディー語」 • 中村公則「らくらくペルシャ語 文法から会話」 • 道広勇司「アラビア系文字の基礎知識」 – http://moji.gr.jp/script/arabic/article01.html