労働者階級ではないから
こちら(プロレタリアート)は権力勾配(パワー)により生まれる生存本能で保険をかけてしまい何も動けなくなる
えらい人(ブルジョワジー)も孤独でプレッシャーがあり、鎧を纏っている結果として偉そうにみえる
人類の99%はこの先10年で無用階級(ダリッド級)になり、AI貴族によって管理されるので一過性なのかもしれない
資産メモ
- iDeCo割合を海外アクティブファンド100%にしていたが、インデックスファンド(日本50%、全世界50%)に変更
- 選ばれし人類の選定によるアクティブファンドの手数料の割に、インデックスファンドに利益率負けてきたため
- 人類の敗北
- 年金いらないからiDeCoに月50万払わせてほしい
Sudachiを使って形態素解析(名詞抽出)
spacy+GiNZAだと100秒かかったのがsudachiだと10秒で終わる、しかも名詞自動抽出の精度もなかなか。
#!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz #!tar -zxvf ldcc-20140209.tar.gz #!pip install sudachipy sudachidict_core # 大量データセットの用意 import pandas as pd import glob # データを読み込むディレクトリを指定 data_dir = "text/" # カテゴリとファイルパスのリストを作成 categories = [name for name in glob.glob(data_dir + "/*")] file_paths = [name for category in categories for name in glob.glob(category + "/*")] # データを読み込んでDataFrameを作成 data = [] for path in file_paths: with open(path, "r") as f: text = f.read() category = path.split("/")[-2] data.append({"category": category, "text": text}) df = pd.DataFrame(data) from sudachipy import tokenizer from sudachipy import dictionary tokenizer_obj = dictionary.Dictionary().create() mode = tokenizer.Tokenizer.SplitMode.C # 分割モードをCモードに設定 def nonus_tokenize(text): lines = text.split('\n')[2:] text = '\n'.join(lines) nouns = [m.surface() for m in tokenizer_obj.tokenize(text, mode) if m.part_of_speech()[0] == "名詞"] return nouns import time print(df.count()) start = time.time() df["tokens"] = df["text"].apply(nonus_tokenize) end = time.time() time_diff = end - start print(time_diff) print(df["text"][0]) print(df["tokens"][0])
pandas多量データに対して人名抽出
速度を計測
なぜかnlp.pipeの効果があまりなかった・・・
■enable=['tagger']あり
| nlpの並列化 | nlp.pipeのbatch数 | 秒数(約7500データ) |
|---|---|---|
| nlp.pipe | batch=1000 | 102.87 |
| nlp.pipe | batch=2000 | 100.61 |
| nlp.pipe | batch=5000 | 105.46 |
| nlp.pipe | なし | 106.12 |
| なし(df.apply) | - | 101.83 |
■enable=['tagger']なし
| nlpの並列化 | nlp.pipeのbatch数 | 秒数(約7500データ) |
|---|---|---|
| nlp.pipe | batch=1000 | numpy.core.exceptions.ArrayMemoryError: Unable to allocate 2.03 GiB for an array with shape (946264, 576) and data type float32 |
| nlp.pipe | batch=2000 | numpy.core.exceptions.ArrayMemoryError: Unable to allocate 2.97 GiB for an array with shape (1659733, 480) and data type float32 |
| nlp.pipe | batch=5000 | numpy.core.exceptions.ArrayMemoryError: Unable to allocate 1.43 GiB for an array with shape (3993494, 96) and data type float32 |
| nlp.pipe | なし | numpy.core.exceptions.ArrayMemoryError: Unable to allocate 86.0 MiB for an array with shape (234708, 96) and data type int32 |
| なし(df.apply) | - | 574.53 |
# pip install setuptools # pip install ipadic import pandas as pd import glob # データを読み込むディレクトリを指定 data_dir = "text/" # カテゴリとファイルパスのリストを作成 categories = [name for name in glob.glob(data_dir + "/*")] file_paths = [name for category in categories for name in glob.glob(category + "/*")] # データを読み込んでDataFrameを作成 data = [] for path in file_paths: with open(path, mode="r", encoding="utf-8") as f: text = f.read() # category = path.split("/")[-2] data.append({"text": text}) df = pd.DataFrame(data) import spacy import time nlp = spacy.load("ja_core_news_lg", enable=['tagger']) def remove_personal_name_with_spacy(row): text = row.text #start = time.time() doc = nlp(text) result = [] for token in doc: if token.tag_ in ["名詞-固有名詞-人名-姓", "名詞-固有名詞-人名-名"]: result.append("●●") else: result.append(token.text) #end = time.time() #time_diff = end - start #print(time_diff) return "".join(result) def remove_personal_name_with_spacy_pipe(doc): result = [] for token in doc: if token.tag_ in ["名詞-固有名詞-人名-姓", "名詞-固有名詞-人名-名"]: result.append("●●") else: result.append(token.text) return "".join(result) print(len(df["text"])) start = time.time() #df["tokens"] = [remove_personal_name_with_spacy_pipe(doc) for doc in nlp.pipe(iter(df['text']), batch_size = 2000)] df["tokens"] = df.apply(remove_personal_name_with_spacy, axis=1) end = time.time() time_diff = end - start print(time_diff) print(df.count()) print(df["text"][0]) print(df["tokens"][0])
MeCabで名詞抽出
vibratoがビルドできない場合はMeCabそのまま使ったほうが手軽
#!pip install mecab-python3 #!pip install setuptools #!pip install ipadic # 大量データセットの用意は前回記事参照 import pandas as pd import glob # データを読み込むディレクトリを指定 data_dir = "text/" # カテゴリとファイルパスのリストを作成 categories = [name for name in glob.glob(data_dir + "/*")] file_paths = [name for category in categories for name in glob.glob(category + "/*")] # データを読み込んでDataFrameを作成 data = [] for path in file_paths: with open(path, mode="r", encoding="utf-8") as f: text = f.read() # category = path.split("/")[-2] data.append({"text": text}) df = pd.DataFrame(data) import MeCab import ipadic CHASEN_ARGS = r' -F "%m\t%f[7]\t%f[6]\t%F-[0,1,2,3]\t%f[4]\t%f[5]\n"' CHASEN_ARGS += r' -U "%m\t%m\t%m\t%F-[0,1,2,3]\t\t\n"' tagger = MeCab.Tagger(ipadic.MECAB_ARGS + CHASEN_ARGS) def nonus_tokenize(text): lines = text.split('\n')[2:] text = '\n'.join(lines) node = tagger.parseToNode(text) nons = [] while node: word = node.surface hinshi = node.feature.split(",")[0] if hinshi == "名詞": nons.append(word) node = node.next return nons df["tokens"] = df["text"].apply(nonus_tokenize) print(df.count()) print(df["text"][0]) print(df["tokens"][0])
大量日本語データセットを用意してvibratoで形態素解析するサンプル
大量日本語データセット準備(ライブドアニュース)
#!wget https://www.rondhuit.com/download/ldcc-20140209.tar.gz #!tar -zxvf ldcc-20140209.tar.gz #!pip install pandas import pandas as pd import glob # データを読み込むディレクトリを指定 data_dir = "text/" # カテゴリとファイルパスのリストを作成 categories = [name for name in glob.glob(data_dir + "/*")] file_paths = [name for category in categories for name in glob.glob(category + "/*")] # データを読み込んでDataFrameを作成 data = [] for path in file_paths: with open(path, "r") as f: text = f.read() category = path.split("/")[-2] data.append({"category": category, "text": text}) df = pd.DataFrame(data)
vibrato準備
#!pip install vibrato #!pip install zstandard # 分類モデルのダウンロード #!wget https://github.com/daac-tools/vibrato/releases/download/v0.5.0/ipadic-mecab-2_7_0.tar.xz #!tar xf ipadic-mecab-2_7_0.tar.xz import vibrato import zstandard # 分類モデルの読み込み dctx = zstandard.ZstdDecompressor() with open('ipadic-mecab-2_7_0/system.dic.zst', 'rb') as fp: with dctx.stream_reader(fp) as dict_reader: tokenizer = vibrato.Vibrato(dict_reader.read())
大量データセットに対して形態素解析して名詞を抽出(列を追加)
def nonus_tokenize(text):
lines = text.split('\n')[2:]
text = '\n'.join(lines)
tokens = tokenizer.tokenize(text)
nouns = [token.surface() for token in tokens if token.feature().split(',')[0] == "名詞"]
return nouns
df["tokens"] = df["text"].apply(nonus_tokenize)
print(df.count())
print(df["text"][0])
print(df["tokens"][0])
結果
手元のPCでは7000件に対して5秒で実行できた。
category 7376 text 7376 tokens 7376 dtype: int64 http://news.livedoor.com/article/detail/6317546/ 2012-02-27T16:11:00+0900 「最新」とつぶやくだけで最新ニュースをゲット! 定期配信も可能な便利機能が「LINE」に登場【話題】 スマートフォンアプリとして人気の「LINE」。チャットやIP電話を手軽に楽しむことができると人気だ。そのアプリから、今度はニュース情報をチェックすることができる「公式アカウント」が登場した。 これは、世の中の話題を幅広く扱っている「livedoorニュース」からの注目のニュースを教えてくれる「LINEニュース」アカウント。 使い方も簡単で公式アカウント「LINEニュース」(ID:linenews)を追加するだけ。朝、昼、晩と時間を指定することで、定期購読も簡単に行え、また「最新」と送るとその時点での最新ニュースも3つ教えてくれる。これによって、毎日のニュースのチェックも、知りたいときに最新情報を得ることもでき便利だ。 LINE内の「友達追加」一覧から「知り合いかも?」のところからも追加することができる公式アカウント。LINE利用者はチェックしてみてはいかがだろう? LINE ■関連記事 ・ソニーF3 ズームレンズテスト【ビデオSALON】 ・会議室から教室まで! 価格で汎用性の高い3D対応プロジェクターDELLから新発売【売れ筋チェック】 ・ZACUTO社製 キヤノンC300用アクセサリーが発売【ビデオSALON】 ・この時期に頼りになるのは空気清浄機! 豪徳寺美鈴が悩んでゲットしたのはコレ!【家電の女:第四話】 ・AKB前田敦子がネタにされファンが大激怒! 日本一下世話なクイズ番組がネットで話題に【話題】 ['最新', '最新', 'ニュース', 'ゲット', '定期', '配信', '可能', '便利', '機能', 'LINE', '登場', '話題', 'スマートフォンアプリ', '人気', 'LINE', 'チャット', 'IP', '電話', '手軽', 'こと', '人気', 'アプリ', '今度', 'ニュース', '情報', 'チェック', 'こと', '公式', 'アカウント', '登場', 'これ', '世の中', '話題', 'livedoor', 'ニュース', '注目', 'ニュース', 'LINE', 'ニュース', 'アカウント', '使い方', '簡単', '公式', 'アカウント', 'LINE', 'ニュース', 'ID', 'linenews', '追加', '朝', '昼', '晩', '時間', '指定', 'こと', '定期', '購読', '簡単', '最新', '時点', '最新', 'ニュース', '3つ', 'これ', '毎日', 'ニュース', 'チ ェック', 'とき', '最新', '情報', 'こと', '便利', 'LINE', '内', '友達', '追加', '一覧', '知り合い', 'ところ', '追加', 'こと', '公式', 'アカウント', 'LINE', '利用', '者', 'チェック', 'いかが', 'LINE', '関連', '記事', 'ソニー', 'F', '3', 'ズームレンズ', 'テスト', 'ビデオ', 'SALON', '会議', '室', '教室', '価 格', '汎用', '性', '3', 'D', '対応', 'プロジェクター', 'DELL', '発売', '売れ筋', 'チェック', 'ZACUTO', '社', '製', 'キヤノン', 'C', '300', '用', 'アクセサリー', '発売', 'ビデオ', 'SALON', '時期', '頼り', 'の', '空気', '清浄', '機', '豪徳寺', '美鈴', 'ゲット', 'の', 'コレ', '家電', '女', '四', '話', 'AKB', '前田', '敦子', 'ネタ', 'ファン', '激怒', '日本一', '下世話', 'クイズ', '番組', 'ネット', '話題', '話題']