u++の備忘録

自然言語処理

言語処理100本ノック 2020「15. 末尾のN行を出力」

問題文 nlp100.github.io 問題の概要 「14. 先頭からN行を出力」とほぼ同様です。今回表示するのは上位N件ではなく下位N件なので「head(N)」の代わりに「tail(N)」を使います。 import sys import pandas as pd if len(sys.argv) == 1: print('Set arg n, li…

言語処理100本ノック 2020「14. 先頭からN行を出力」

問題文 nlp100.github.io 問題の概要 ①コマンドライン引数でNを受け取る②pandasでデータを読み込み上位N件を表示するーーの2段階で処理します。 Pythonにて実行時に「python (ファイル名) hoge」として与えたコマンドライン引数は「sys.argv」にリストとし…

言語処理100本ノック 2020「13. col1.txtとcol2.txtをマージ」

問題文 nlp100.github.io 問題の概要 pandasでデータを読み込み「pd.concat(リスト)」でリスト内のデータを結合します。「axis=1」で結合方向を指定しています。 import pandas as pd c1 = pd.read_csv('ch02/col1.txt', header=None) c2 = pd.read_csv('ch0…

言語処理100本ノック 2020「12. 1列目をcol1.txtに,2列目をcol2.txtに保存」

問題文 nlp100.github.io 問題の概要 pandasでデータを読み込み、列ごとにファイルに吐き出します。 import pandas as pd df = pd.read_csv('ch02/popular-names.txt', sep='\t', header=None) df[0].to_csv('ch02/col1.txt', index=False, header=None) df[…

言語処理100本ノック 2020「11. タブをスペースに置換」

問題文 nlp100.github.io 問題の概要 pandasでデータを読み込み、保存時に区切り文字としてタブではなく半角スペースを指定します。 import pandas as pd df = pd.read_csv('ch02/popular-names.txt', sep='\t', header=None) df.to_csv('ch02/ans11.txt', s…

言語処理100本ノック 2020「10. 行数のカウント」

問題文 nlp100.github.io 問題の概要 第2章では、表形式のデータを扱います。筆者がKaggleなどで使い慣れているpandas*1を利用します。 pandasでデータを読み込み「len()」で行数を取得します。読み込み時にはファイル形式に応じて「sep='\t', header=None」…

言語処理100本ノック 2020「09. Typoglycemia」

問題文 nlp100.github.io 問題の概要 少し処理が煩雑ですが、大体は今まで扱った記法が利用できます。 ランダムに並び替える部分は「random.shuffle()」や「random.sample()」が選択肢となります*1。 リストを文字列として半角スペース区切りで結合するため…

言語処理100本ノック 2020「08. 暗号文」

問題文 nlp100.github.io 問題の概要 文字の文字コードを得るには「ord()」を使います。逆に文字コードから文字を得る場合は「chr()」です。「print(ord(a), ord(z))」として、英小文字が取りうる文字コードの範囲を調べ、条件分岐に盛り込みましょう。 「''…

言語処理100本ノック 2020「07. テンプレートによる文生成」

問題文 nlp100.github.io 問題の概要 Pythonでは、いくつかの方法で文字列に変数を埋め込めます。3.6以降のバージョンで利用可能になった「f文字列」*1が便利です。 def generate_text(x, y, z): return f'{x}時の{y}は{z}' x = 12 y = '気温' z = 22.4 prin…

言語処理100本ノック 2020「06. 集合」

問題文 nlp100.github.io 問題の概要 bi-gramの作成には「05. n-gram」のソースコードを流用します。 Pythonでは「set()」を用いることで、集合の概念を扱えます。 def n_gram(target, n): return [target[idx:idx + n] for idx in range(len(target) - n + …

言語処理100本ノック 2020「05. n-gram」

問題文 nlp100.github.io 問題の概要 n-gram*1を作る関数を作成します。 def n_gram(target, n): return [target[idx:idx + n] for idx in range(len(target) - n + 1)] text = 'I am an NLPer' for i in range(1, 4): print(n_gram(text, i)) print(n_gram(…

言語処理100本ノック 2020「04. 元素記号」

問題文 nlp100.github.io 問題の概要 ①文を単語に分割する②各単語の先頭の1文字もしくは2文字を取り出すーーの2段階で処理します。②の処理では、条件分岐が必要です。 ①の処理は「03. 円周率」と同様です。 ②の条件分岐に当たって、単語の順番情報が必要なた…

言語処理100本ノック 2020「03. 円周率」

問題文 nlp100.github.io 問題の概要 ①文を単語に分割する②各単語の文字数を数えるーーの2段階で処理します。 ①の処理には、文字列を特定の区切り文字で分割する「split()」が利用できます。引数に何も指定しない場合は、半角スペースで分割します。 半角コ…

言語処理100本ノック 2020「02. 「パトカー」+「タクシー」=「パタトクカシーー」」

問題文 nlp100.github.io 問題の概要 問題文の指示通り、2つの文の冒頭から1文字ずつ取り出します。 text0 = 'パトカー' text1 = 'タクシー' ans = '' for i in range(len(text0)): ans += text0[i] ans += text1[i] print(ans)

言語処理100本ノック 2020「01. 「パタトクカシーー」」

問題文 nlp100.github.io 問題の概要 文字列の奇数番目を取り出す問題です。 Pythonでは、文字列の「スライス」を用いることで、この処理を実現できます*1。 text = 'パタトクカシーー' print(text[1::2]) *1:qiita.com

言語処理100本ノック 2020「00. 文字列の逆順」

問題文 nlp100.github.io 問題の概要 第1章では、基本的な文字列操作を扱います。この問題では、文字列を逆順に並び替えます。 Pythonでは、文字列の「スライス」を用いることで、この処理を実現できます*1。 text = 'stressed' print(text[::-1]) *1:qiita.…

「言語処理100本ノック 2020」をPythonで解く

「言語処理100本ノック 2020」が4月6日に公開されました。2015年以来、5年ぶりの改訂です。昨今の自然言語処理の研究動向を鑑み、深層ニューラルネットワークに関する問題追加などの変更があります。 nlp100.github.io 実装のためのプログラミング言語として…

【論文メモ】「第24回 人工知能学会 金融情報学研究会」で気になった発表

「第24回 人工知能学会 金融情報学研究会(SIG-FIN)」*1で気になった発表をいくつか読みました。 昨年10月の第23回が台風接近の影響で中止*2となり、今回も新型コロナウイルスの影響で中止*3となってしまいました。今回は「発表扱い」で原稿も公表されたの…

【書籍メモ】『機械学習・深層学習による自然言語処理入門 scikit-learnとTensorFlowを使った実践プログラミング』

2月26日に刊行された『機械学習・深層学習による自然言語処理入門 scikit-learnとTensorFlowを使った実践プログラミング』を読みました。 「日本語」のデータで、「今の自然言語処理」をイチから学ぶ! 公式サイトの宣言文句が、本書の特徴を言い得ています…

「ML@Loft #6」参加メモ

「ML@Loft #6」に参加しました。 ML@Loft は AWS 上で機械学習ワークロードを運用しているデベロッパー/データサイエンティストのための、お悩み相談会です。 第6回は MLPP #4 との共催で、これまでも人気だった "自然言語処理 (NLP) / レコメンド" や "時系…

typo辞書を人力で作るためのTips

準優勝したKaggleのPetfinderコンペでは、元データの英単語の綴りミスなどの修正に用いる辞書を手動で構築しました。upura.hatenablog.com本記事では、このような辞書を構築した方法についてまとめます。 結論 概説 embeddingのout of vocabularyとなる単語…

日本語版text8コーパスから単語の分散表現を得る

はじめに 参照記事 GitHub 手順 コーパスのダウンロード gensimでの読み込み Kaggle Kernel おわりに はじめに 手軽に日本語の単語の分散表現を得ようと思ったら、これが良かった。数分でやりたいこと終わった。===日本語版text8コーパスを作って分散表現を…

コロケーションの指標「C-value」のPython実装

概要 論文 要旨 C-valueの算出アルゴリズム 計算の具体例 実装 概要 コロケーション("Read a newspaper", "Write a blog" など、慣習的に用いられる英単語の組み合わせ)を抽出したい 以下のブログで紹介されていたコロケーションの指標「C-value」をPython…

TF-IDFを用いた「Kaggle流行語大賞2018」【kaggle Advent Calendar 14日目】

本記事は、kaggle Advent Calendar 2018の14日目の記事です。12日目で最後の予定でしたが、穴が空いていたので2日ぶり6回目の投稿です。qiita.com はじめに 本記事では、年の瀬ということで「Kaggle流行語大賞2018」という題材に取り組みます。具体的には、…

Rを用いて般若心経を感情分析してみた

はじめに 感情分析とは Rのパッケージ 般若心経を感情分析 データの準備 分析結果 おわりに はじめに 本記事は、hiro.is(@youjo_DS)さんの以下のブログを読んで着想を得ました。loveshome.hatenablog.jp 感情分析とは 感情分析とは、その名の通り単語や文章…

Pythonで動く形態素解析ツール「nagisa」を使ってみた

はじめに nagisaとは 使ってみた nagisaの利点 文字単位の双方向LSTMを採用しており、URLや顔文字に頑健 単語分割の方法を調整できる nagisaの課題 おわりに はじめに PyCon2018でポスター展示があったらしく、フォロワーさんの投稿で存在を知りました。形態…

Jリーグの戦評、「1秒あまり」で自動作成 Jリーグ公式サイトからテキスト速報をスクレイピングして試合を要約する

はじめに 神戸新聞社が開発した「経過戦評ロボットくん」 Jリーグ版を作った 生成した戦評 アルゴリズムの概要 テキスト速報のスクレイピング ゴールが入ったプレーか否かの判定 文言を微調整して戦評を作成 おわりに はじめに 先日(2018年7月24日)公開さ…

遺伝的アルゴリズムでAIに自分の誕生日を祝ってもらう

突然ですが、本日7月25日は僕の誕生日です。とはいえ、特に誰かが祝ってくれるわけでもないので「無いなら作る」というエンジニア精神で、誕生日を祝ってくれるプログラムを実装しました。GitHub github.com システム要件 システムの実装 [要件1] コマンドラ…

【論文メモ】世代による政治ニュース記事の閲覧傾向の違いの分析

どんなもの? グノシーにおけるユーザ行動履歴を用い、政治に関するニュース記事の閲覧傾向が世代によってどのように異なるのかを分析。最初に世代ごとのPVランキングを作成し、後に順位の差分が大きい記事を取り上げることで、若い世代は政策に中高年は政局…

自然言語処理×ジャーナリズムな研究まとめ ~ 言語処理学会(NLP2018)より ~

今年のGWも終わりますね。僕は若者らしく、今年3月の言語処理学会の論文を読み漁っていました*1。言語処理学会第24回年次大会(NLP2018) の発表論文集を一般公開しました。年次大会参加者だけでなく、すべての方が登録等一切なしですべての発表論文PDFをご覧…