python AI

自然言語テキストが何語なのか判定する [fastText]

Pythonの機械学習(ディープラーニング)を活用した自然言語処理・自然言語認識ライブラリ"fastText"を使用し、言語や外国語が一体何語なのかを自動認識します。fastTextというツールを使用して、テキストの言語が日本語なのか中国語なのか英語なのかフランス語なのか、何語なのかを判定します。

Shou Arisaka
2 分で読める
2020年1月6日

Pythonの機械学習(ディープラーニング)を活用した自然言語処理・自然言語認識ライブラリ”fastText”を使用し、言語や外国語が一体何語なのかを自動認識します。

fastTextというツールを使用して、テキストの言語が日本語なのか中国語なのか英語なのかフランス語なのか、何語なのかを判定します。

Image

こんな感じにできます。 “hola”はスペイン語なんですが、英語になってるところが気になりますね。

英語圏の人々にとっては、スペイン語も英語も同じようなものなのかもしれません。

Image

pythonのためのインストール

git clone https://github.com/facebookresearch/fastText.git
cd fastText
pip install .  # sudo pip install . 

一応他のインストール方法

wget https://github.com/facebookresearch/fastText/archive/v0.9.1.zip
unzip v0.9.1.zip
cd fastText-0.9.1
make

./fasttext 

データセットのダウンロード

wget https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.bin

Pythonスクリプト

# coding:utf-8

import fasttext
import json 

# model = fasttext.load_model("/home/yuis/pg/python/fastText/lid.176.bin") 
model = fasttext.load_model("/mnt/c/pg/python/fasttext/lid.176.bin") 

def predict_language(text, model, k=1):
  label, prob = model.predict(text, k)
  return list(zip([l.replace("__label__", "") for l in label], prob))

print( json.dumps(predict_language(u'{{text}}', model, k=2)) )

サンプル

print( json.dumps(predict_language(u'こんにちは', model, k=2)) )
print( json.dumps(predict_language(u'hello', model, k=2)) )
print( json.dumps(predict_language(u'Zürich', model, k=2)) )

Bash関数 (ご自由にお使いください)

predict_language(){

  : <<<'
  e.g. predict_language "hello"
  e.g. predict_language "こんにちは"
  '

export TEXT="${1}"

cat << 'EOT' | mo > "$PGDIR/python/fasttext/predict_language.py"
# coding:utf-8

import fasttext
import json 

# model = fasttext.load_model("/home/yuis/pg/python/fastText/lid.176.bin") 
model = fasttext.load_model("/mnt/c/pg/python/fasttext/lid.176.bin") 

def predict_language(text, model, k=1):
  label, prob = model.predict(text, k)
  return list(zip([l.replace("__label__", "") for l in label], prob))

print( json.dumps(predict_language(u'{{TEXT}}', model, k=2)) )
EOT

# python "$PGDIR/python/fasttext/predict_language.py" | parsejson "[0][0]"
python "$PGDIR/python/fasttext/predict_language.py" 

}

: ショートハンド 
predict_language "hello" 
predict_language "こんにちは" 
predict_language "你好" 
predict_language "hola" 
predict_language "Zürich" 

: jsonパース 
predict_language "hello" | parsejson "[0][0]"
predict_language "こんにちは" | parsejson "[0][0]"

: 使用例 
if [[ "$( predict_language "hello" | parsejson "[0][0]" )" == "en" ]]; then echo "この言語は英語です。" ; fi 
if [[ "$( predict_language "hello" | parsejson "[0][0]" )" == "ja" ]]; then echo "この言語は日本語です。" ; fi 

この記事をシェア

Shou Arisaka 2020年1月6日

🔗 リンクをコピー