Open2

毎日アウトプット(2022) 自然言語処理、データ科学関連

schnellschnell

毎日のアウトプット用途に使う
1週間単位ごとに投稿を行い、最終的に50本以上の記事を書くことが目標である。

schnellschnell

1/1

対数線形モデルについて

対数線形モデルとは

分割表が書けるようなデータに対して使えるデータ分析手法[参考記事]
期待度数が説明変数とどのように関係しているかの分析手法。
つまりA(例えば性別), B(ある法案に賛成か否か)という2種類の説明変数系列が存在し、目的変数となるそれぞれのグループ(女性かつ賛成、男性かつ賛成等)の度数は説明変数系列に対してどのように関係しているかを考える分析手法。

自然言語処理における対数線形モデル

自然言語処理においては分類モデルとして活用される。系列に対して分類ラベルを与え素性ベクトルと重みベクトルの内積を最適化させるようなラベルを決定する問題となる。素性関数を自由に変更することで取得する特徴量を人手制御できるので内容によっては高い説明性を担保しつつ分類タスクを解けると考えられる。
詳しくは高村本を参照されたし。
↓参考実装
https://github.com/schnell3526/my_nltk/blob/main/my_nltk/LogLinearModel.py

1/2

numpyでの配列の連結に関して

  • numpy.hstack
    配列を要素にもつタプルを受け取り、複数の配列を水平方向(axis=0)に結合
a = np.ones(1)
b = np.zeros(2)
c = np.full(3, 20)
a,b,c
# (array([1.]), array([0., 0.]), array([20, 20, 20]))

np.hstack((a,b,c))
# array([ 1.,  0.,  0., 20., 20., 20.])

Python正規表現に関して

MULTILINEの仕様

re.MULTILINEは改行を文字列の末と認識するフラグ
以下の例において前者は末の改行を終端と認識しfoo2がマッチするのに対し、
後者はfoo1がマッチする。

reg = re.compile(r"foo.$")
reg_multiline = re.compile(r"foo.$", re.MULTILINE)

text = "foo1\nfoo2\n"

# 次の結果は異なるか
reg.search(text)
reg_multiline.search(text)

貪欲と非貪欲

reg1 = re.compile(r"<.*>")
reg2 = re.compile(r"<.*?>")
print(reg1.findall("<a> b <c>"))
print(reg2.findall("<a> b <c>"))
# ['<a> b <c>']
# ['<a>', '<c>']

演算子の優先順位

よくわからなかったがとりあえず"|"(or演算)は優先順位が低く対象を()で括る必要がある。

re.searchとre.match

searchは文字列の全てが探索対象、matchは先頭からが探索対象
re.MULTILINEフラグを渡してもmatchは文字列の先頭にしかマッチしない

re.search("$","text")
# <re.Match object; span=(4, 4), match=''>
re.match("e","text")
# None

re.fullmatchは文字列の全てがマッチするかどうか(webアプリのvalidで使えそう)

その他知らなかったけど使えそうな正規表現

(?...)シリーズ

# fooの後にbarが続く場合にのみマッチ(lookahead assertion)
reg = re.compile(r"foo(?=bar)")
# マッチする
reg.match("foobar")
# マッチしない
reg.match("foo bar")

# 上の逆パターン(negative lookahead assertion)
reg = re.compile(r"foo(?!bar)")
# マッチする
reg.match("foo bar")
# マッチしない
reg.match("foobar")

1/3

https://taku910.github.io/mecab/

mecabのapiまとめ

  • unix mecab
mecab
今日の天気は雨です。
今日	名詞,副詞可能,*,*,*,*,今日,キョウ,キョー
の	助詞,連体化,*,*,*,*,の,ノ,ノ
天気	名詞,一般,*,*,*,*,天気,テンキ,テンキ
は	助詞,係助詞,*,*,*,*,は,ハ,ワ
雨	名詞,一般,*,*,*,*,雨,アメ,アメ
です	助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。	記号,句点,*,*,*,*,。,。,。
EOS
# わかちがき
mecab -O wakati
# 読み付与
mecab -O yomi

1/4

文字コードに関して

計算機において、各文字に対して持っている符号の事。(一つの文字と1,0の羅列の対応付けのようなもの)
ある文字コードAとBで符号化された文書が存在するとき、どちらか一方にのみ存在する文字は当然扱いづらい、また変換のコストも大きい

Unicodeとは

上述のように全く異なる符号化を異なる文字コード間で行うのは都合が悪いので、統一をはかろうとしたのがUnicode。割り当ては0x0-0x10ffffまであるらしい。

print(0x0, 0x10ffff)
# 0 1114111
print(hex(ord("a")))
# 0x61
print(hex(ord("♪")))
# 0x266a

現在使用中なのは111万のうち約25%

1/5

指定した行を抽出

sed -n "行数"p file

1/8

numpyで相関係数を計算