Code Monkey home page Code Monkey logo

python-npylm's Introduction

Nested Pitman-Yor Language Model (NPYLM)

ベイズ階層言語モデルによる教師なし形態素解析のC++実装です。

単語n-gramモデルは3-gramで固定です。2-gramは非対応です。

現在も開発途中です。

実装について

文字列の単語ID化をハッシュで実装しているため、学習結果を違うコンピュータで用いると正しく分割が行えない可能性があります。

更新履歴

2017/11/21

  • 前向き確率の計算をlogsumexpからスケーリングに変更

動作環境

  • Boost
  • C++14
  • Python 3

準備

macOS

macOSの場合、PythonとBoostはともにbrewでインストールする必要があります。

Python 3のインストール

brew install python3

PYTHONPATHを変更する必要があるかもしれません。

Boostのインストール

brew install boost-python --with-python3

Ubuntu

Boostのインストール

./bootstrap.sh --with-python=python3 --with-python-version=3.5
./b2 python=3.5 -d2 -j4 --prefix YOUR_BOOST_DIR install

Pythonのバージョンを自身のものと置き換えてください。

ビルド

以下のコマンドでnpylm.soが生成され、Pythonから利用できるようになります。

make install

makefile内のBoostのパスを自身の環境に合わせて書き換えてください。

Ubuntuでエラーが出る場合は代わりに以下を実行します。

make install_ubuntu

MeCabのインストール

半教師あり学習をする場合は必要です。

pip install mecab-python3

学習(教師なし)

run/unsupervisedにコード例があります。

実行例

python3 train.py -split 0.9 -l 8 -file YOUR_TEXTFILE

オプション

  • -file
    • 学習に使うテキストファイル
  • -dir
    • 学習に使うテキストファイル群が入っているディレクトリ
    • 複数ファイルを用いる場合はこちらを指定
  • -split
    • 読み込んだ行のうち何割を学習に用いるか
    • 0から1の実数を指定
    • 1を指定すると全データを用いてモデルを学習する
  • -l
    • 可能な単語の最大長
    • 日本語なら8〜16、英語なら16〜20程度を指定
    • 文の長さをN、単語の最大長をLとすると、NPYLMの計算量はO(NL^3)になる

なお学習の再開はできません。

学習(半教師あり)

run/semi-supervisedにコード例があります。

実行例

python3 train.py -train-split 0.9 -ssl-split 0.01 -l 8 -file YOUR_TEXTFILE

オプション

  • -file
    • 学習に使うテキストファイル
  • -dir
    • 学習に使うテキストファイル群が入っているディレクトリ
    • 複数ファイルを用いる場合はこちらを指定
  • -train-split
    • 読み込んだ行のうち何割を学習に用いるか
    • 0から1の実数を指定
    • 1を指定すると全データを用いてモデルを学習する
  • -ssl-split
    • 学習データのうち何割を教師データに用いるか
    • 0から1の実数を指定
  • -l
    • 可能な単語の最大長
    • 日本語なら8〜16、英語なら16〜20程度を指定
    • 文の長さをN、単語の最大長をLとすると、NPYLMの計算量はO(NL^3)になる

なお学習の再開はできません。

単語分割

分割結果をファイルに保存します。

python viterbi.py -file YOUR_TEXTFILE

オプション

  • -file
    • 分割するテキストファイル
  • -dir
    • 分割するテキストファイルが入っているディレクトリ
    • 複数ファイルをまとめて分割する場合はこれを指定
    • ファイルごとに個別の出力ファイルが作成されます
  • -out
    • 出力フォルダ

注意事項

研究以外の用途には使用できません。

https://twitter.com/daiti_m/status/851810748263157760

実装に誤りが含まれる可能性があります。

質問等、何かありましたらissueにてお知らせください。

展望

現在、条件付確率場とベイズ階層言語モデルの統合による半教師あり形態素解析半教師あり形態素解析NPYCRFの修正を実装しています。

実行結果

けものフレンズ実況スレ

アンダーフローが起きていないかを確認するためにわざと1行あたりの文字数を多くして学習させています。

15万行あったデータから改行を削除し4,770行に圧縮しました。

/ アニメ / に / セルリアン / 設定 / を / 出 / す / 必要 / は / まったく / なかった / と思う / um / nk / は / 原作 / と / 漫画 / で / 終わり方 / 変え / て / た / なあ / 原作 / 有り / だ / と / 色々 / 考え / ちゃ / う / けど / オリジナル / だ / と / 余計な / 事 / 考え / なくていい / ね / 犬 / のフレンズ / だから / さ / 、 / ガキが余計な / レスつけてくんな / って / 言って / る / だろ / ジャパリパーク / 滅亡 / まで / あと / 1 / 4 / 日 / 間 / 。 / まだ / 作品 / は / 完結 / して / ない / し / この / あと / 話 / に / どう / 関わって / くる / か / わから / ない / と思う / んだが / 最終話 / まで / い / って / / そういう / こと / だった / のか / ー / ! / / って / な / った / 後で / 見返すと / また / 唸 / ら / され / そう / な / 場面 / が / 多い / ん / だよ / ね / お別れ / エンド / 想像 / する / だけで / 震え / て / くる / けど / ハッピー / エンド / なら / 受け入れ / る / しかない / よ / ね / この / スレ / は / 子供 / が / 多くて / 最終回の / 感動 / も / 萎える / だ / ろ / う / 百合 / アニメ / として / 楽しんで / る / 奴 / もいる / ん / だね / ぇ / あー / 、 / それ / は / 誤 / り / だ / 。 / 低 / レアリティ / フレンズ / にスポットライト / が / 当て / られ / て / る / こと / もある / 。 / 毒 / 抜いた / っていう / のは / 伏線 / 回収 / は / だいたい / や / る / けど / も / 鬱 / な / 感じ / に / は / して / ない / ていう / 意味 / だ / と / 解釈 / し / た / けど / 【 / � / 】 / 『けものフレンズ』 / 第 / 10話「ろっじ」 / より / 、 / 先行 / 場面 / カット / が / 到着 / ! / 宿泊 / した / ロッジ / に / 幽霊 / ……? / 【 / � / 】 / [無断転載禁止]©2ch. / net [ / 8 / 9 / 1 / 1 / 9 / 1 / 9 / 2 / 3 / ] / 実際のところ / けもの / フレンズ / は / 百合 / なのか / ? / 例えば / どこが / 百合 / っぽい / ? / いや / 、 / ある / だろ / 。 / セルリアン / が / いる / 事 / に / よって / 物語 / に / 緊張感 / が / 生まれ / る / 。 / 伏線 / が / 結構 / 大きい / 物 / な気がする / んだ / けど / これ / あと / 2話 / で / 終わ / る / のか / なぁ / ? / もしかして / 「 / ジャパリ / パーク / の / 外に / 人間 / を / 探しに / 行く / よ / ! / カバンちゃん / たち / の / 冒険は / これから / だ!」 / エンド / じゃある / まい / な / それ / でも / あれ / は / 許容 / し / 難 / かった / とおもう / ぞ / そもそも / 利 / 潤 / 第一 / でない / けもの / プロジェクト / に / 売上 / で / 優劣 / 語 / る / の / は / ナンセンス / や / ぞ / の / タイトル / も / いい / な / カバンちゃん / 「 / さーばる / 島の外に / 出 / ちゃ / う / と / 記憶 / も / なくな / る / ん / だ / よ / ? / 」 / さーばる / 「 / うん / 、 / それ / でも / いい / よ / 。 / 」 / カバンちゃん / 「 / う / うん / 、 / ダメ / 。 / ボク / が / のこ / る / よ / 。 / 」 / さーばる / 「 / え? / ・・・ / 」 / カバンちゃん / 「 / さーばる / は / 大切な / 僕 / のフレンズ / だから / 」 / わざわざ / ng / 宣言 / とか / キッズ / の / 代表 / みたいな / も / ん / だろ / 出来 / の / 良い / おさ / らい / サイト / が / ある / よ / 俺 / も / そこ / で / 予習 / し / た / タイム / アタック / 式 / の / クエスト / で / 低 / レア / 構成 / ボーナス / 入るから / 人権 / ない / ってレベル / じゃ / ない / ぞ /

/ 予約 / でき / ない / のに / いつまで / 2巻 / は / ランキング / 1位 / なん / だ / よ / けもの / フレンズ / 、 / 縮めて / フレンズ / 。 / ジャパリパーク / の / 不思議 / な / 不思議な / 生き物 / 。 / 空 / に / 山 / に / 海 / に / フレンズ / は / いた / る / ところ / で / そ / の / 姿 / を / 見 / る / こと / が / 出来 / る / 。この / 少女 / 、 / ヒト / と / 呼ばれ / る / かばん。 / 相棒 / の / サーバル / と / 共に / バトル / & / ゲット / 。 / フレンズの / 数だけ / の / 出会い / が / あり / フレンズの / 数だけ / の / 別れ / がある / ( / 石塚運昇) / ニコ動 / 調子 / 悪 / そう / なんだ / けど / 上映会 / だ / いじょうぶ / か / ね / コスプレ / はよ / もう / 何度も / 書かれてる / だろうけど / 、 / 2話 / ed / で / 入 / って / きた / 身としては / ed / やっぱ / 良い / 。 / 歌 / も / 歌詞 / も / 合って / る / し / 、 / 普通の / アニメ / っぽく / ない / 廃墟 / に / した / の / も / 全部 / 良い / 。 / 情報 / が / 氾濫 / し / すぎ / て / 何 / が / ネタバレ / か / さっぱり / 分からん / けど / 、 / 1つ / ぐらい / は / 本物 / が / まじ / っ / て / そう / だな / 。 / ま、 / 来週 / を / 楽しみ / に / して / る / よ / 。 / アライさん / の / 「 / 困難は / 群れで分け合え / 」 / って / 台詞 / もしかして / アプリ版 / で / 出て / きた / こと / あった / りする / ? / それ / なら / 記憶 / の / 引 / 継ぎ / 説 / は / ほぼ / 間違え / なさ / そう / だ / けど / 神 / 展開 / で / ワロタ / これ / は / 地上波 / 流 / せ / ません / ね / ぇ / … / まあ、 / 数 / 打ちゃ当たる / 11話の / 展開 / は / 予想 / されて / なかった / 気配 / だ / が / 汗 / まあ / ニコ動 / ランキング / に / あ / っ / た / アプリ版 / ストーリー / 見 / た / 時 / 点 / で / すでに / 覚悟はできてる / 一 / 人 / でも / いいから / 出 / して / ほしかった / … / マジで / サーバル / / プレーリードッグ / / ヘラジカ / 殷周 / 伝説 / みたい / な / 肉 / マン / を / 想像 / し / ちゃ / っ / た / じゃぱりまん / の / 中身 / で / 肉 / が / ある / なら / だ / が / 無い / から / 安心 /

/ 知識 / や / 性格 / まで / クローン / は / 無理 / だ / と思う / nhkで / アニメ / 放送 / から / の / 紅白 / 出場 / だと / 嫌な予感がする / 藤子不二 / 雄 / や / 大友 / 克洋や / 鳥山明 / は / エール / を / 送 / られ / た / が、 / 自分 / が / 理解 / でき / ない / もの / が / 流行 / っ / て / る / と / 怒 / った / らしい / な / 巨人の星 / とか / ス / ポ / 根 / も / のは / 、 / どうして / こんな / もの / が / 人気 / なん / だ / って / アシスタント / と / 担当 / に / 怒鳴り / 散らし / た / そう / な / 日本語 / で / しか / 伝わらない / 表現 / ある / もん / ね / ひらがな / カタカナ / 漢字 / でも / ニュアンス / 使い / 分 / け / られ / る / し / また / 同時 / に / 英語 / いい / なあ / と思う / 所 / もある / 親友 / ( / ?) / なのに / そ / の / 欠片 / も / み / られ / ない / 猫 / の / 話 / は / やめ / なさい / … / なん / か / 、 / マズルの / ところ / が / カイ / ゼル / 髭 / みたい / で / 、 / かわいい / っていうより / カッコイイ / とおもう / ん / だが / / 「 / ( / いや / 俺ら / に / 言われ / て / も / ) / 」 / って / 困惑 / する / 様子 / が / w / 藤子不二 / 雄 / は / 貶 / そう / と / 思って / た / ら / 全力で / 尊敬 / されて / 持ち / 上げ / て / くる / ので / 面倒見 / ざるを得な / かった / とか / いう / ホント / か / ウソ / か / 分からない / 逸話 / すこ / 世界 / 最高峰 / の / 日本 / アニメ / を / 字幕 / 無し / で / 観 / られ / る / 幸せ / たぶん / そうな / ん / だろう / とは思う / が / おいしい / とこ / だけ / 取ら / れ / て / 何も / やってない / 扱い / で / うん / ざ / り / して / そう / 結局 / 自分 / の / 好 / み / って事 / か / 本人 / に / しか / わから / ない / 先 / 駆 / 者 / として / の / 強烈な / 自負 / と / 、 / 追い / 抜か / れ / る / 恐怖 / かわ / あった / のだろう / と愚考 / した / 。 / スポーツ / 漫画や / 劇 / 画 / が / 流行 / っ / た / 時 / ノイローゼ / になり / かけ / た / と / 聞く / が / 、 / 90年代 / 以降 / の / トーン / バリバリ / アニメ / 絵柄 / や / 萌え / 文化 / とか / 見 / た / ら / どう / なってしまう / んだろう / あと / サーバルちゃん / かわいい / コクボス / 「 / ジカ / ン / ダヨ / 」 / 礼儀 / は / 守 / る / 人 / だろう / … / 内心 / 穏やか / ではない / が / ニコ動 / の再生数 / なんて / まったく / 当て / に / ならん / ぞ / ニコ生 / の / 来場者 / 数 / と / 有料 / 動画 / の / 再生数 / は / 当て / に / して / いい / けど / 6話 / の / へいげん / の / とき / / ヘラジカ / さん / たち / に / 「 / サーバルキャット / のサーバル / だよ / 」って / 自己紹介 / して / た / のが / なんか / 不思議 / だ / った / な / 「 / 省略 / する / 」って / 文化 / ある / ん / だ / / みたい / な / 一話 / の再生数 / で / 分かる / のは / 洗脳 / 度 / だけ / だ / な / すぐ / 解 / け / る / 洗脳 / かも知れん / が / それ / 見たい / わ / めちゃくちゃ / 好循環 / じゃない / か / … / イッカク / クジラ / の / イッカク / だ。 / って / 名乗 / って / る / キャラ / もいた / し / 。 / いや~ / メンゴメンゴ / / あ / 、 / ボス / さん / きゅー / w / アプリ版 / の / オオ / アルマジロ / の / 声で / 絡んで / ほしかった / ( / cv / 相 / 沢 / 舞 / ) / 名前 / の / 概念 / 例えば / ヘラジカ / は / 種族 / として / 言って / る / のか / 名前 / と / して / 言って / る / のか / かばんちゃん / と / 名 / 付け / て / る / から / 概念 / として / は / 在 / る / ん / だろう / けど / 果たして / クローン / は / 同じ / ポテンシャル / を / 引き / 出 / せ / る / だろう / か / 。 / 藤子f / という / か / ドラえもん / に / は / 完全 / 敗北 / を / 認め / て / た / らしい / から / ね / ドラえもん / を / 超え / る / キャラ / は / 作れ / ない / って / どうぶつ / スクープ / と / ダーウィン / と / wbc / どっち / を優先 / すべき / か /

/ 捨て / た / り / しない / ん / じゃないかな / ? / ま、 / ちょっと / (ry / ロッ / ソファンタズマ / は / 先代 / サーバル / の / 技 / って / 言いたい / のは / わかる / けど / 。 / かばんちゃん / 視点 / から / 見ると / op / の / 映像 / の意味 / になる / と / いう / ダブルミーニング / なの / かも知れない / これ / は / なかなか / 面白い / 基本的に / ゲスト / フレンズって / カップル / にな / る / けど / この / 二人 / は / その後 / どうなった / ん / だろう / ね / 杏子 / も / 野中 / か / 優しく / て / 元気な / 女の子 / の / 唐突な / 涙 / は / めちゃくちゃ / くる / もの / がある / な / ppp / が / 歌 / って / る / こと / から / 考えると / あり / 得 / る / ね / 、 / 宣伝 / 曲 / そして / まんま / と / ようこそ / され / ました / なんだか / コケ / そう / な / 気がして / ならない / 12話 / だから / 話 / を / 膨らま / せ / て / 伏線 / を / 回収 / して / って / の / が / でき / た / けど / だら / っと / 続け / て / いく / と / すると / ・・・ / たまに / 見 / る / 豆腐 / や / 冷奴 / は / 何 / を / 示唆 / して / る / ん / だ / ? / 姿 / が / フレンズ / だと / 判別 / でき / ない / ん / じゃないか / とりあえず / 初版 / は / 無理 / でも / 重版分 / 買おう / 古典sf / 的に / タイ / ムスリップ / して / アプリ版 / プレイヤー / として / ミライさん / の / 運命 / を / 変え / に / 行く / とか / は / あり / そう /

/ すごーい / ぞ / おー / ! / が / 正解 / で / 世界遺 / 産! / が / 空耳 / おいおい / エヴァ / か / ? / 聖域 / への / 立ち / 入り / 認可 / 、 / 正体 / 不明 / な / 新規 / フレンズ / の / 評価 / 、 / 困った / とき / の / 相談 / 役 / 色々 / やって / る / な / 輪廻転生 / して / 二人 / は / 一緒 / も / 人間 / は / 滅んで / て / かばんちゃん / は / サーバルちゃん / とずっと一緒 / も / ぶっちゃけ / 百合厨の願望 / だし / たつきが / そんな安直な / 設定 / に / せ / ん / でしょ / ジャパリパーク / って / 時間 / の / 進 / み / が / サンドスター / その他 / の / 影響 / で / 物凄く / 早 / く / なって / る / から / 人工 / 物 / が / 朽ち / て / た / り / する / ん / か / な / 聞こえ / ない / と / 言えば / ツチノコ / の / 「 / ピット器官 / ! / 」 / って / 言 / っ / た / 後 / に / モ / ニャモニャ / … / って / なんか / 言って / る / けど / なんて / 言って / る / のか / 未だに / 分からない / … / メ / イ / ズ / ランナー / 的な / 人類滅亡 / とか / ちょっと / 似てる / し / 13話 / ネタバレ / 中尉 / か / つて / の / ロッジ / で / は / フレンズと / 一 / 夜 / を / 共に / する / こと / が / でき / る / 人工 / 物 / は / ヒト / が / 使わ / なくな / る / と / たった / 数年 / で / 朽ち / る / よ / 林 / 業 / 管理 / も / やって / る / から / な / toki / o / のフレンズ / と / 言われ / て / も / 不思議 / はない / 図書館 / に / 入 / り / 浸 / って / ゴロゴロ / 絵本 / 読んで / る / フレンズ / い / ない / かな / ピット器官 / ! / ・・・ / ・・・ / だとかでぇ、 / 俺には / 赤外線が見えるからな / ! / ( / ・ / ∀・) / 目 / が / か / ゆい / … / ジャパリパーク / に / も / 花粉症 / は / ある / のか / な / サーバル / が / なぜ / ハシビロコウ / だけ / ハシビロ / ちゃん / 呼び / なのか / が / 最大の / 謎 / 12話 / は / op / は / 一番 / 最後 / カバンちゃん / と / サーバルちゃんが / 仲良く / ブランコ / に / 揺ら / れ / る / 絵 / が / 入 / る / よ / けもフレ / を / 細かく / 見 / て / ない / 間違って / セリフ / 覚え / て / る / アプリ / 時代 / の / 知識 / を / 間違って / 捉え / て / る / って / いう / ので / 、 / 悶々と / 考察 / してる / 人 / の / 多 / い / こと / 多い / こと / … / … /

2ch

2chから集めた884,158行の書き込みで学習を行いました。

/ どことなく / 硬貨 / の / 気配 / が / ある / な /

/ 展開 / の / ヒント / と / 世界観 / を / 膨らま / せ / る / ギミック / と / 物語 / の / 伏線 / を / 本当に / 勘違い / して / る / 人 / は / い / ない / でしょ /

/ トラブっても / その / 前の / 状態 / に / 簡単 / に / 戻 / れ / る /

/ レシート / を / わ / た / さ / ない / 会社 / は / 100% / 脱税 / している /

/ すっきり / した / 。 / 実装 / 当時 / は / 2度と / やりたく / 無い / と思った / けど /

/ 未だ / 趣味 / な / 個人 / 用途 / で / win / 10 / に / 頑なに / 乗り換え / ない / ヤツ / なんて / 新しい / もん / に / 適応 / でき / ない / 老 / 化 / 始ま / っ / ちゃ / って / る / お / 人 / か /

/ 実家の / 猫 / がよくやる / けど / あんまり / 懐 / かれ / て / る / 気がしない /

/ ラデ / の / ラインナップ / は / こう / いう / 噂 / のようだ。 /

/ ダメウォ / なんて / 殆ど / で / ねー / じゃねーか / ど / アホ /

/ 新 / retina / 、 / 旧 / retina / が / 併売 / され / て / る / 中 / で / 比較 / やら / 機種 / 選び / ごと / に / 別 / スレ / 面倒 / だ / もん /

/ イオク / 出 / る / だけで / 不快 /

/ あの / まま / やってりゃ / ジュリア / の / 撃墜 / も / 時間の問題 / だ / っ / た / し /

/ も / し / 踊ら / され / て / た / ら / 面白 / さ / を / 感じ / られ / る / はず / だ /

/ 二連 / スレ建て / オ / ッ / ツ / オ / ッ / ツ /

/ の / ガチャ限 / 定運極化特別ルール / って / 何 / ですか / ? /

/ 特に / その / 辺 / フォロー / ない / まま / あの / 状況 / で / と / どめ / 刺 / し / 損 / ね / ました / で / 最後 / まで / いく / の / は / な / ・・・ /

/ こうなると / 意外 / に / ツチノコ / が / ハードル / 低 / そう /

/ 強制 / アップデート / のたびに / 自分 / の / 使い方 / にあわせた / 細かい / 設定 / を / 勝手に / 戻 / す / だけ / で / なく /

/ マジか了 / 解した /

/ 今度 / は / mac / 使い / () / に / 乗り換え / た / ん / だろう / が / ・・・ / 哀れ / よ / のぅ / / 今 / 後 / も / ノエル / たくさん / 配 / って / くれ / る / なら / 問題ない / けど /

/ マルチ / 魔窟 / 初めて / やった / けど / フレンド / が / いい人 / で / 上手く / 出来 / た / わ /

/ 咲 / くん / も / 女 / の / 子 / 声優 / が / よかった /

/ 確かに / 少し / づつ / エンジン / かか / っ / て / き / た / 感じ / が / する / な /

/ くっそ / 、 / まず / ラファエル / が / 出 / ねえ /

/ 第六 / 世代 / cpu / で / 組 / もう / と思って / る / けど / win10 / 買 / う / の / は / は / 待った / 方が / いい / のか / な / これ / … / (´・ω・`) /

/ 移動 / 先 / で / ある程度 / なんで / も / で / き / る / mbp / は / 本当に / いい / 製品 / だ / と思います /

/ いや / 俺 / は / そこ / が / 好き /

/ と言えば / ギャラホルン / 崩壊 / しそう /

/ オオクニ欲 / しかった /

python-npylm's People

Contributors

musyoku avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.