Python Keyphrase extraction (pke) というモジュールがあります。TextRank等著名なキーフレーズ抽出手法をサポートしているPython用パッケージです。 GiNZAの登場により、内部でspacyを使っているソフトウェアが日本語でも使えるようになったケースが増えてきているのですが、pkeも最近の更新で完全に無改造で日本語を扱えるようになりました。 それ以前にpkeを日本語で使うための記事がいくつかあります。 はじめての自然言語処理 第5回 pke によるキーフレーズ抽出 2021年版PKEライブラリーによる日本語キーフレーズ処理のサンプル・PKEをアップデートしたら動かなくなってしまった方へ pkeはここのところ頻繁に更新があり、ストップワード以外は無改造で動くようになっていました。ストップワードに関しても先の記事のようなハックをしないで済むようなPRを出したところ、もうちょっと洗練されたコードに置き換わってくれました。ともあれ上記の記事の方法と使い方がちょっと変わってしまったのでここに記録しておきます。サンプルはオージス総研の記事に倣います。 language=’ja’とした場合、spacyの利用可能なモデルから’ja’で始まる最初のモデルを利用します。したがって、ginzaが入っていればja_ginzaモデルが自動的に利用されます。
Category: ソフトウェア
GnukのEmulation mode
2021/3/10 FSIJセミナーで解説されたのでメモ これでできること: 実物のGnukを使わない動作テスト 鍵生成などは失敗すると最悪なにもできなくなるので練習ができる 事前に必要なもの scdaemon usbip python3-cffi, python3-pytest ソースコードの準備とビルド手順、起動まで 別のターミナルを開き、vhci, usbipを用いてUSBデバイスとして扱えるようにする テストの動作 gpgでカードとして扱う PINはadmin: 12345678, 通常 123456 初期化 (factory-reset) 新規鍵生成 (generate) 内容は ~/.gnuk-flash-image に保存される 作成した鍵で暗号化 (gpg -e) 追記(2020-03-12) Facebookでg新部さんよりいくつかご指摘いただきました encryptでは秘密鍵を使わない(のでここはテストになっていない) Debian 10 (Buster)のGnuPG 2.2.12では復号化に失敗する。2.2.27では問題ないとのこと Gnuk 1.2.17時点で鍵生成にバグがある。今は修正がpushされている
バーチャル背景を任意のサービスで利用する
webcamにアクセスして、人体を検出し背景画像と合成をするページ https://knok.github.io/virtbg/ を作りました。TensorFlow.js, BodyPixを使っています。 ページそのものは単にカメラへのアクセスと画像合成だけを行うので、これをオンラインミーティングサービス等で使うためには何かしらの手段で出力をカメラに見せる必要があります。Qiitaの記事として、OBS studioとプラグインを組み焦る方法を書きました。 Windows, Linux, Macそれぞれに対応するプラグインがあるので、それらのプラットフォームで利用できます。Linuxならv4l2loopbackを使います。 ブラウザ->OBS->プラグインという処理パイプラインになるので、これでも若干のオーバーヘッドがあります。Google Meetでカメラを差し替えるChrome拡張として実装した人がいるので、この方法ならオーバーヘッドはより少なく済んでいそうです。私は面倒だったのでOBSに機種依存部分を丸投げしてしまいましたが…その代わり任意のサービスに利用ができます。Jistiでも使えるので次のオンラインセミナーではこれを使うつもりです。
2018年のエイプリルフール
自分の観測範囲で見かけたものをまとめてみます。ほかにFLOSS関連でこんなのがあった、という話があれば追加します。 Free Software Foundation announces crowdfunding campaign to buy Facebook — Free Software Foundation FSFがFacebookを買収するためにクラウドファンディングを始めた、というネタ。ところでFacebookはGnuPGに寄付をしています。 Bug#894551: ITP: fascism — Exhaustive exploration of Fascist theory and practice ファシズムをDebianパッケージ化する提案です。過去にもrootkitのITPなど、エイプリルフールネタはありました。
gnu.org日本語翻訳ミーティング参加
先日、「www.gnu.orgの日本語訳について」のミーティングに参加してきました。最近のFSIJ月例会はMumbleを用いたリモート開催を増やしているので、リアルミーティングは久しぶりです。 当日の配布資料はhttp://git.savannah.gnu.org/cgit/www-ja.git/tree/doc/meeting-2017-01.txtにあります。そちらにもgnu.org翻訳作業への参加方法が書かれていますが、興味のある方はSavannahのwww-jaプロジェクトのメーリングリスト(閲覧は要登録)や、gitリポジトリの参照(こちらはanonymous clone可能 git://git.savannah.gnu.org/www-ja.git)も見てみてください。 個人的な活動 – 機械翻訳 私はこの1年ろくな活動ができていなくて申し訳なかったのですが、以前から考えていた「www-jaをコーパスとして機械学習による翻訳モデルを構築する」という活動に手をつけ始めました。TensorFlowのseq2seqサンプルを若干修正してWMTの代わりに任意のテキストファイルを与えられるようにしたコードは以前作成した(https://github.com/knok/tf-seq2seq-mod)ので、あとはデータセットを作成するだけです。 まずは以下のようなPython scriptを作ってみました。Python2, polib, natto-pyで動きます。 以下のような感じで実行しています。 残念ながら利用可能なGPUを持っていないので、CPU演算のみで処理しています。今のところDebianで深層学習フレームワークがtesting(stretch)入りしているのはCaffe, Theanoの2つだけで、TensorFlowや自分がよく使っているChainerは入っていません。まあこのあたりはupstreamの更新も頻繁なので、あえてパッケージを使わなくともvirtualenv+pipで適時入れるほうが良い気もします。 とはいえ、GPUを使って深層学習を行うということは、ほとんどの場合プロプライエタリなソフトウェアに依存することと等価なので、「gnu.orgの翻訳」ということに限ればむしろCPUのみでの処理の方が望ましいのかもしれません。 自由なコンピューティング 実際、ミーティング当日も自由なコンピューティング環境がより一層損なわれているという話がありました。gniibeさんはChromebookにLibrebootを苦労して入れているようです。 自分もここ数日いろいろとひどい目にあいました。Xbox 360のSmartGlassを使ってみようとしたのですが、Windows 8.1の場合Xbox 360で利用しているLiveアカウントとの関連付けをWindows自身のログインアカウントと紐付けないと利用できないのです。Windows 8以降、Microsoftは極力Liveアカウントでのログインをさせるよう誘導しているのですが、8.1(とおそらく8)でそれが強制されるというのは厳しく、利用を諦めました。ただ、Windows 10ではこの点は改善されているようで、SmartGlassを含むストアアプリはアプリ単位で個別に利用するLiveアカウントを設定したり、そもそもLiveアカウントの必要ないアプリは普通にローカルアカウントのまま利用できるようになっていました。なので、Windows 10マシンでSmartGlassを利用しています。 iPhone, Android端末なども実質iCloud, googleアカウントが必須に近い状態ですが、Windowsも同様の仕組みに倒しているわけで、自由からより通い方向に進んでいるなあと痛感しました。 メンテナ不在問題 現在メンテナが不在なGNU Projectのソフトウェアについていくつか名前が挙げられました。 一つはGNU bisonです。これは割と致命的な気がしたのですが、GCCは4以降独自パーサ(gniibeさんによると、そもそもC++が自由文脈文法でないため)を採用しているとのことなので、案外問題は少ないのかもしれません。メジャーな言語処理系でもbison(yacc)必須なものがぱっと浮かびませんし。 もうひとつはGNUbikだそうです。うーん、これは重要でもないですかね。
Mini Debian Conference Japan 2016参加
2016/12/10に開催されたMini Debian Conference Japan 2016に参加してきました。場所は日本橋のサイボウズオフィス内で、LibreOffice Kaigi 2016と同時開催でした。自分も一応両方に参加するつもりで申し込みも両方にしたのですが、結果としてDebian側の話ばかり聞いていました。 その時の様子はハッシュタグ#debianjpでツイッターを検索するとある程度様子が伺えると思います。自分が参加しているセッションについてはある程度ツイートしています。せっかくなのでMomentsを使ってみようかと思ったのですが、全部のツイートが出てこない上に時系列に並んでいない、並び替えはすべて手動という使い勝手の悪いインターフェースで断念しました。 個人的には音響モデルを含めて自由ソフトウェア実装として作ったバーチャルシンガー徵音梅林(ちおんメイリン)に最もインパクトを受けました。発表は台湾の張正一(Chou Shouichi)さんでした。 発表資料の中でも触れられていましたが、クリプトン・フィーチャーの商用ソフトウェアであるVOCALOIDは作成できる内容に制限があります。初音ミクのEULA(PDF)にありますが、公序良俗に反するなどの歌詞を含めることを禁止しています。現実にはそういった内容のものが作成、公開されているのですが、規約レベルではアウトです。張さんは、ギターを燃やすパフォーマンスの写真などを交えて「音楽活動は自由であるべきだ」と主張されていました。これには強く同意します。 ソフトウェアのベースはWORLD(修正BSDライセンス)というパテントフリーなものを使っているとのことでした。音響モデルもマスコットキャラクターもCC-BY 3.0で配布しています。 残念ながら、まだフロントエンドについては実装がこなれていないようです。デモではWineでVOCALOIDのエディタを利用されていました。まだ日本で利用している例はほとんどなさそうですが、頑張って欲しいと思います。
自作辞書のブートストラップを考える
かな漢字変換や形態素解析といった処理を行うにあたって、辞書は必要不可欠な存在です。これを一から自作することを考えています。 適切な単語のリストの作成 単語に対する読み、品詞の追加 単語に対するコスト値の算出 データソースはWikipediaを使う こんな感じでおそらくはできるでしょう。時間はかかると思うので、ゆっくり考えていくつもりです。 今はまず教師なし機械学習による単語分割を使って、単語リストを作ることを試みています。これについては階層Pitman-Yor過程に基づく可変長n-gram言語モデル(VPYLM)の実装が複数あり、それを使うことである程度下処理ができます。 latticelm C++/OpenFSTによる実装 vpylml-python C++/Pythonによる実装 (解説記事) Wikipediaの記事はhttps://dumps.wikimedia.org/jawiki/からダウンロードできます。本文のダンプはjawiki-latest-pages-articles.xml.bz2というファイル名です。これをWikipedia ExtractorというPythonスクリプトでプレーンテキストに変換できます。変換時に警告が出ますが、それはたいてい自己参照に関するものなので、放っておいても大丈夫そうです。 さしあたって、展開ディレクトリ/AA/wiki_00を対象にlatticelmをデフォルトパラメータで実施したところ、以下のような感じになりました。 ちょっと分割されすぎですね…ハイパーパラメータはいろいろとあるので、チューニングはいろいろと必要そうではあります。他に試された人の解説によると、初期状態がすべて分割されている点が大きいとのことです。 以前の記事で紹介した「続・わかりやすいパターン認識 教師なし学習入門」には通常のPitman-Yor過程までは解説されており、VPYMLに関してはなんとなくでしか理解出来ていません。もう少し自分の理解も深めたいところです。 単語分割自体は系列ラベル問題とみなしてRecurrent Neural Networkベースで処理することも出来るそうですが、教師あり学習なのできちんとしたデータセットを作る必要があります。そこにたどり着くまでのところを、教師なし学習との組み合わせでなんとか実現したいところです。
GNU screen tips
「普段使っているGNU screenのtips」という記事をQiitaに投稿しました。簡単にまとめると multi attach (-xオプション) fit コマンドによる画面のリサイズ -Xオプションの応用 C-a ” (windowlist -b)カーソルキーでのウィンドウ選択 number コマンドでウィンドウ番号入れ替え title, setenv という感じです。 これ以外に、screen上のすべてのウィンドウでgpg-agentにパスワードをキャッシュさせるpinentry-cursesを特定のウィンドウで待機させる、ということをやっているのですが、使っているスクリプトがgniibeさん作なので書きませんでした。というかあのスクリプトはそこそこ問題なく動いている感じなので公開してもらえたらなあ、と思っています。
2016年4月FSIJ月例会 BBG-SWD
先日FSIJ月例会がありました。タイトルは「SWDプログラマの決定版 BBG-SWD」です。 一口でまとめると、ARMによるSWD(Serial Wire Debug)をBeagleBone Green上で使えるようにしたという話でした。 そもそもの背景には、gniibeさんが販売しているハードウェアFST-01やFSM-55の製造過程があります。実際にハードウェアの製造を行うSeeed Studioでは、ファームウェアの書き込みにST-Link/V2というJTAGデバッガを、Windows上で動作するST Micro提供のソフトウェアで使っているという問題があります。ファームウェア書き込み部分も自由ソフトウェア、ハードウェアで置き換えることを目的としているそうです。これによって、”Respects Your Freedom Hardware product“の認証を取得する資格が得られるようです。ST Microのプロプライエタリなソフトウェアを介さないので、その部分でマルウェアを仕込まれるような可能性も低減できます。 ソフトウェアのリポジトリはhttp://git.gniibe.org/gitweb/?p=bbg-swd.gitにあります。この中には、BeagleBone Greenのbone-kernelと呼ばれる種類のLinux kernelに含まれるPRUSS(Programmable Realtime Unit SubSystem)のドライバ(uio_pruss)を介して動作するプログラムと、それをOpenOCDで利用可能にするためのOpenOCDへのパッチから構成されています。 gniibeさんはこの成果をhackster.ioのIoTコンテストに応募したそうですが、ファイナリストまでは選出されたものの受賞には至らなかったとのことでした。 Raspberry PIを筆頭としたワンチップマイコンは広く流行っていますが、こういった低レイヤーまで自由なコンピューティング環境を提供しているものはなかなか無いようです。 有志によるリバースエンジニアリングの成果でそれなりに自由なOrange PIシリーズは、熱に弱いという問題があるそうです。自分も購入したのにここ数ヶ月使っていなかったので知りませんでした… 今の時期暖かくなってきましたが、そんな環境でも動作するというgniibeさんのおすすめはWandboardだそうです。
自由なデータの重要性
先日、NEologd Casual Talksというイベントに参加してきました。mecab-ipadicに新しいエントリーを追加するmecab-ipadic-neologdに関するイベントでした(Togetterまとめ)。 その中で改めて感じたのは、自由なデータの重要性です。イベントでは「言語資源」という観点でのデータの重要性が語られていました。形態素解析器の辞書として、継続的に更新・リリースがなされているのはNEologd以外ほとんどないという指摘がありました。 自分も2012年にSoftware Freedom Dayの国内イベントで「自由なデータ」という題で発表をしました。 自由なデータ from Takatsugu Nokubi 今になって改めてこの資料を見ると、現在は若干状況が変化している部分もあります。NEologdの出現は、まさしくその一つです。 また、日本語の文章チェッカーとしてtextlintという実装の日本語ルールを作成・公開している人がいます。これまでLanguageToolに若干のルールをコミットしてきましたが、textlintのほうがかなり充実している感じです。 最近は機械学習をやってみたりしているのですが、これもまさにデータの質がかなり重要な領域です。変なデータを元に学習すると、そもそも学習が収束しなかったり、期待しない結果を返すモデルができてしまったりします。この領域でも、チュートリアルに使われる定番のデータセットが公開されています(MNIST, CIFAR-10等)。 最近、自分も画像分類タスクのテストのために作ったデータセットはあるので、なんとか公開できる形にできないかと考えています。実データはInstagramにあるもので、個々の画像のライセンスを確認しないまま集めて分類したのですが、画像URLの一覧という形なら問題なく配布できると思います。オライリー「実践 機械学習システム」でも感情分析用のツイートデータを人力で分類したもののID一覧から実データを取得する、という方法が取られていました。 実際に自分でデータの分類をやってみると、「どこまでをこの分類に含めるべきか」という根源的な問題を実感できます。実際、単純に検索しただけだと「明らかにおかしい」というものから「これはどうなんだろう」というものも出てきます。 この点について、先日の発表の中で印象的だったのが片山さんの「ファッションが大好きなので無限に洋服の文字列データを眺めるのが楽しかった」という部分でした。特定のドメインのテキストでも、きっと同じような感覚があるのだろうとなんとなく感じています。 ともあれ、公開できる形になったら、改めて告知したいと思います。