LoginSignup
9
8

More than 5 years have passed since last update.

fasttextの保存データ(主に.bin)について

Posted at

はじめに

fasttextはやってますね。
簡単に試せてよいのですが、パラメータの意味や内部で何をしているのかとかよくわからなかったので、ソースを解析してみました。

前提条件

https://github.com/facebookresearch/fastText
の2017/11/30(520b59d722c09943625ede522577119bdd158403)を参考にしています。

.vec形式

単語のベクトル方式をテキスト形式で保存しています。スペース区切りです。

ヘッダは1行です。
単語数 次元数

単語ベクトル行
単語 ベクトル実数 ...

-pretrainedVectors で読み込むときに利用します。
他にも単語のベクトル表現を利用したいときに利用できます。
ただし、テキスト形式のため読み込みは遅くなりがちです。値もある程度丸めてあります。

.bin形式

バイナリ形式で保存しています。

以下の順番で保存されています。

  1. ヘッダ(固定長)
  2. 引数(固定長)
  3. 単語辞書(可変長)
  4. 入力層の重み(マトリクス)(可変長)
  5. 出力層の重み(マトリクス)(可変長)

ヘッダ(固定長)

データ型 内容 備考
int32_t FASTTEXT_FILEFORMAT_MAGIC_INT32 マジックナンバー793712314
int32_t FASTTEXT_VERSION 12

バージョンはコマンドラインでは確認できません。
src/fasttext.hを確認してください。

マジックナンバーは同一チェック
バージョンは実行モジュールと同じか古い.binは読み込めます。

  • 2017/10/4 にバージョンが11から12にあがりました。supervisedで-minn,-maxnが有効になりました。
  • 2017/5/2 にマジックナンバーとバージョンが追加されました。

引数(固定長)

コマンドライン引数を保存しています。
supervised, skipgram, cbow 共通です。
(利用しないものもあり)

データ型 内容 備考
int dim 次元数
int ws windowサイズ
int epoch 学習回数
int minCount 単語の最低出現数
int neg ネガティブサンプル数
int wordNgrams ワードグラム数
loss_name(int) loss hs, ns, softmaxのどれか
model_name(int) model supervised, skipgram, cbowのどれか
int bucket バケットサイズ
int minn 最少N-gram
int maxn 最大N-gram
int lrUpdateRate 進捗表示のレート
double t トークンサンプリング閾値

ここにないオプション(minCountLabel,lrなど)は保存されません。

単語辞書

単語の辞書情報を保存しています。

ヘッダ(固定長)

データ型 内容 備考
int32_t size_ 登録単語、ラベル数
int32_t nwords_ 登録単語数
int32_t nlabels_ 登録ラベル数
int64_t ntokens_ 延べ出現単語数
int64_t pruneidx_size_ quantize化した場合の変換表サイズ(デフォルト-1)

単語データ部(可変長)

データ型 内容 備考
string word 登録単語。0x00区切り
int64_t count 単語出現数
entry_type(int8_t) nlabels_ word, labelのどちらか

quantize変換表(可変長)

データ型 内容 備考
int32_t first 変換元
int32_t second 変換先

マトリクス(可変長)

入力層の重み、出力層の重みは2次元マトリクスとして保存します。
フォーマットは同一です。
※ quantize化した場合はQマトリクスとして保存します。

データ型 内容 備考
int64_t m_ 登録数
int64_t n_ 次元数と同じ
real data_ 可変長 m_×n_サイズ

※ m_について

  • 入力層の重みの場合、gram指定(-minn,-maxn,-wordNgrams)がない場合は、登録単語数。gram指定がある場合は、登録単語数+bucket数
  • 出力層の重みの場合、supervisedの場合はラベル数、その他は登録単語数。

Qマトリクス(可変長)

使っていないので省略

まとめ

fasttextどんどんcommitされています。
結構大きな変更もあるので、ちゃんとみといたほうがいいみたいですね。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8