理系の気ままメモ

自分の興味のあることや発見したことや思ったことなどを自由気ままに書くブログ。

機能語辞書について

機能語辞書として使えそうなもの以下の2つを見つけることができました。

  • 日本語機能表現辞書「つつじ」
    • 松吉 俊佐藤 理史宇津呂 武仁, 日本語機能表現辞書の編纂自然言語処理, 2007, 14 巻, 5 号, p. 123-146, 公開日 2011/03/01, Online ISSN 2185-8314, Print ISSN 1340-7619
  • 機能語用例文データベース「はごろも」
    • 日本語文法項目用例文データベース『はごろも』(http://hgrm.jpn.org
    • 堀恵子・江田すみれ(2011)「web公開予定文法用例検索システム『日本語文法項目用例文データベース』の文法項目選定について」『日本語教育学会2011年度春季大会予稿集』

 

それぞれの概要について紹介します。

日本語機能表現辞書「つつじ」

  • この機能表現辞書では計算機で利用することを想定している。
  • 日本語には複数の形態素からなる、1つの機能を持った「複合辞」が多く存在する。
  • この論文では、機能語と複合辞を合わせて「機能表現」と呼ぶ。
  • 機能表現の異形(活用など)をほぼすべて収録。
  • 機能表現の異形を体系的に扱うため、見出し体系を9つの階層からなる階層構造で収録。
  • 辞書には、341の見出し語と15,771の出現形が収録。

機能語用例文データベース「はごろも」

  • 人間が利用することを想定。
  • 計算機(自然言語処理)で利用することを想定していない。
  • 日本語教師、海外の非母語話者日本語教師、日本語学習者の支援を目的に作成された。
  • 見出し語は旧JLPT*1の「出題基準」など5つの資料から選んだ1,848語。

 

以上のことから、自然言語処理として利用する場合は「つつじ」のほうが適切であると考えられる。しかし、現在のところ日本語機能表現辞書「つつじ」はダウンロードサイトが無くなってしまっている。

日本語機能表現の処理

Research Topics: Processing Japanese Functional Expressions

日本語機能表現辞書「つつじ」ダウンロードサイト

http://kotoba.nuee.nagoya-u.ac.jp/tsutsuji/

 

一方、機能語用例文データベース「はごろも」は利用可能であるため「つつじ」が復活するまではこちらで代用するしかないと思われる。

機能語用例文データベース はごろも

 

 

「第12回対話システムシンポジウム」参加報告

「第12回対話システムシンポジウム」に参加しました

2021年11月29日,30日に行われた「第93回研究会(第12回対話システムシンポジウム)」に参加させて頂きました.また,ありがたいことに29日の「11:30-12:50 ポスターセッション1」において,「9. 対話における後続発話のエントレインメント予測」という題でポスター発表もさせていただきました.
今回発表させていただいた内容の大まかな部分は,実は理化学研究所のガーディアンプロジェクトの知識獲得・対話研究チームというところで今年の夏休みにインターンシップに参加させていただいていた時に行ったものとなっています.後日,インターンシップの内容についても記事を書かせていただきたいと思います.
本記事では,自分の研究内容の紹介ではなく対話システムシンポジウムに参加した感想などをメインに書かせていただきます.ですが一応,投稿論文のリンクをつけておきます.

金崎 翔大, 河野 誠也, 湯口 彰重, 桂井 麻里衣, 吉野 幸一郎, 対話における後続発話のエントレインメント予測, 人工知能学会研究会資料 言語・音声理解と対話処理研究会, 2021, 93 巻, 93回 (2021/11), p. 50-55, 公開日 2021/11/20, Online ISSN 2436-4576, Print ISSN 0918-5682, https://doi.org/10.11517/jsaislud.93.0_50, https://www.jstage.jst.go.jp/article/jsaislud/93/0/93_50/_article/-char/ja, 抄録:
エントレインメントは対話における話者間の言語使用の傾向が互いに類似するような現象であり,対話のタスク成功率や自然性,対話意欲と相関することが報告されている.対話システムの応答選択/応答生成をエントレインメントを考慮して制御することでシステムの応答性能の向上を試みた研究があるが,与えられた対話文脈に対してシステムがどの程度のエントレインメント度合いで応答すれば良いかを適切に決定するようなモデルについての十分な検討は行われていない.そこで本研究では,対話システムの応答における理想的なエントレインメント度合いを決定するために,人間の対話におけるエントレインメントを模倣するような予測モデル構築した.評価実験の結果,提案したエントレインメン予測モデルは,経験的に基づいて構築された単純なベースラインモデルと比較して,高い性能で各ターンにおける応答のエントレインメントを予測できていることを示した.

シンポジウム全体の流れ

シンポジウムは29日と30日の2日かけて行われ,どちらも10時くらいから始まって18時くらいまでだったと思います.また,今年のシンポジウムは完全オンラインで行われ,学会自体はポスター発表も含めて「Zoom」で行われました.細かいタイムスケジュールは次のようになっていました.(https://jsai-slud.github.io/sig-slud/93th-sig.html より引用)

[2]タイムテーブル
〇 11月29日(月)
9:50-10:00 開会挨拶
10:00-11:15 一般口頭発表1(3件)
11:15-11:30 休憩
11:30-12:50 ポスターセッション1(10件)
12:50-13:50 昼休憩
13:50-15:05 一般口頭発表2 (3件)
15:05-15:15 休憩
15:15-18:15 対話システム ライブコンペティション4
18:15-18:45 休憩
18:45-20:00 オンライン懇親会

〇 11月30日(火)
10:00-11:15 一般口頭発表3(3件)
11:15-11:25 休憩
11:25-12:45 インダストリーセッション
12:45-13:40 昼休憩
13:40-15:00 ポスターセッション2(9件)
15:00-15:10 休憩
15:10-16:10 招待講演(大阪大学 長井隆行先生)
16:10-16:20 休憩
16:20-17:20 国際会議報告
17:20-17:30 休憩
17:30-18:00 表彰・閉会

自分は,2日とも参加しました.

1日目(29日)

29日は10時くらいから始まりました.自分は初めての学会発表で結構緊張していました.自分のポスター発表は11:30からで,その前に口頭発表があり全員レベルが高くて,自分の発表がやばいかもと思っていました.口頭発表も興味深いものが多くて面白かったです.また,今回初めてまともに学会やシンポジウムに参加したのですが,発表される方はみんなすごい発表練習されているのだろうなと思わされました.1人当たりたしか20分で話して5分質疑応答となっていたのですが,みなさんほとんど時間ぴったりでスムーズに話されていました.
そのあと,待ちに待った(?)自分のポスター発表の時間になりました.ポスター発表は「Zoom」の「ブレイクアウトルーム」を使いそれぞれの発表者ごとにルームを作って,聞きたい人がそれぞれ好きなルームに自由に移動する方式でした.時間はポスターセッション全体で80分で,1クールあたり10-15分ほどで発表と質疑を終わらして,また1クールが終わると新しくルームに入ってきた人に最初から説明するという方式でした.ただし,自分の場合は実際には20分ほどで1クールになっていたかもしれません.30日に参加したほかのポスターセッションでも人によって20分ほど1クールにかけていた方もいらっしゃったので,その辺はまあある程度自由(?)になっているのではないのかなと思います.
初めての発表ということもあり,緊張しながら11:30を迎えたわけですがなんと拍子抜け開始直後は「広聴者0人」!緊張して損しました(笑)ですが,ありがたいことに,そのあと10-15分ほどすると,何人かの人が聞きに来てくださってそれからは人が途切れずに広聴していただきました.対話システムや言語学を研究されている方など様々な方から質問や意見をいただきました.必死に発表や質問返答を行っているうちにあっという間にポスター発表の時間が終わりました.非常に良い経験になったと思います.まだまだ慣れておらず,自分のポスター発表のルームの進行等がいまいちな感じでしたが次の学会やシンポジウムでの教訓にしたいと思います.
また,29日のお昼には「Gather」による交流会(?)的なものも行われました.午前中に自分はポスター発表があったので,ポスター発表が終わった後にそのままお昼の交流会に参加しました.参加は強制ではなく参加したい人だけ参加的な感じでした.交流会では自分と同じように午前のポスター発表をされた方とお話させていただきました.ポスター発表をしているとほかの方のポスター発表を聞きに行くことができないのでこの時に別のポスター発表の方の発表を少し聞かせていただきました(笑)
その後,口頭発表があり,対話システムライブコンペがありました.対話システムライブコンペは以前から名前などは聞いたことがあったのですが,今回初めて見ました.それぞれ企業や研究者から対話システムが応募され,対話システムが最も人っぽい返答ができるかを競うコンペみたいなものになっています.対話システムは事前に予選で選ばれていて,上位3-5位がこのシンポジウム当日の決勝戦(?)に参加できるようになっているようです.詳しくはネットや学会の情報を確認してください.当日は,予選を勝ち抜いたシステムとランダムに事前に選ばれたシンポジウムの運営の方(?)が対話とチャットで行い,シンポジウム参加者がその対話を見て得点をつけ,その平均点で順位を決める形のようです.今回初めて作りこまれた対話システムと人間が会話しているのを見たのですが,思っていたよりも人っぽい応答ができていて非常に驚きました.しかし,やはり時々すこし不自然な応答をする時もありました.まだまだ対話システムはいろいろと研究するべき点があるのだろうと思いました.
大体29日はそんな感じで終わりました.この後,希望者だけでオンライン懇親会がありました.自分も参加させて頂きました.参加した人をランダムな4,5人ほどのグループに分けてZoomのブレイクアウトルームで雑談を行うというような感じでした.各グループに運営の方が1人以上は含まれるように調整は行われていた感じです.自分は研究活動などで感じていた疑問等について少し質問させていただいたりしました.

2日目(30日)

DE0-CVの初期の環境設定

本記事について

 入門用のFPGAボードの一つである"DE0-CV"についての初期の環境設定についての概要を書きました。Windows10環境です。

 「動かしてわかる CPUの作り方10講」という本を読んでいてCPUの実装をFPGAで行いたかったため、本で紹介されていた"DE0-CV"を購入した。

メーカのページ

www.terasic.com.tw

 

目次

 

必要なソフトをダウンロードとインストール

メーカのページからダ「DE0-CV CD-ROM」をダウンロードする。アカウントの作成が必要。「CD-ROMs」とか色々あったが自分は「CD-ROMs」をダウンロードした。

Terasic - DE Boards - DE0-CV Board

f:id:zakio_10:20201211194856p:plain

 

次に、intel社のサイトからFPGAに書き込みする際に必要なソフト「Quartus」をダウンロードしてインストールする。自分はその時に最新版だった「Version 20.3」をダウンロードした。これもアカウントの作成が必要。Editionがいくつかあるが、自分は「Lite Edition」を選んだ。他のEditionは有料らしい。

f:id:zakio_10:20201211195723p:plain

Download Center for FPGAs

「Lite Edition」を選択すると別のページに飛ぶ、とりあえず丸付けた2つをダウンロード。

f:id:zakio_10:20201211200153p:plain

「Quartus」をインストールする。インストールした「Quartus」を管理者権限で起動して、「Tools」の「Install Devices」を押す。進んでいって、さっきダウンロードした「device support」のファイルがあるフォルダを選択する。すると次のような画面が出るので、チェックを入れて進んでいくと"DE0-CV"に必要なファイルが入る。

f:id:zakio_10:20201211202000p:plain

ひとまずこれで「Quartus」の方はおk。

ドライバとかの設定

一番最初にダウンロードした、コントロールパネルのソフトを起動し、接続しようとすると、いろいろなエラーが出る。(自分はでました。)そこで、次はドライバなどの設定をする。

以下の手順に従うと直った。

https://www.terasic.com.tw/cgi-bin/page/archive_download.pl?No=293&FID=200aff87041ba08a6d36c06adf88efc6

自分が行ったこと、

1.デバイスマネージャを開いて「USB Blaster drivers」を入れる。下のようになって値手認識されてない。

f:id:zakio_10:20201211204005p:plain

右クリックして更新でフォルダ選択してドライバを入れる。

パス : ...\intelFPGA_lite\20.1\quartus\drivers\usb-blaster

これで認識される。

f:id:zakio_10:20201211204210p:plain

参考動画

https://www.youtube.com/watch?v=bwoyQ_RnaiA

 

2.「bin32」のフォルダを「...\intelFPGA_lite\20.1\quartus」に置く。

f:id:zakio_10:20201211204657p:plain

「bin32」は先ほどのPDFに書いてあるリンクでダウンロードできる。

「bin32」リンク

http://mail.terasic.com.cn/~wyzhou/bin32.zip

 

以上2点を行ったら、「DE0-CV」をUSBケーブルでパソコンに接続して、「DE0-CV」の電源を入れて、「DE0-CVのコントロールパネル」を開く。

左下のconnectを押すと...

f:id:zakio_10:20201211205050p:plain

おめでとう。接続できました。LEDとか7-SEGとか押すとボードもそれに対応して変化するよ。

 

参考になったサイト

"failed to find quartus installation folder" と表示されて MAX10-Lite のコントロールパネルが使えないときの対処法 - FPGA学習メモ

レッドコーダーが教える、競プロ・AtCoder上達のガイドライン【中級編:目指せ水色コーダー!】をやる。

本記事について

E869120さんがQiitaに公開されている記事をやってみてそれについて感じたことをメモする。
qiita.com

メモ

全探索:全列挙

1.ITP1_7_B - How Many Ways?
  • 問題リンク

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_7_B&lang=ja

  • メモ

問題文の「重複無しで...」と「組み合わせの数を...」の部分を見落としていて、最初はi,j,kの正整数(順序あり)を全探索しようとしてしまい、少し時間を無駄にした。このようにたまに問題文を間違えて認識してしまうことがあるので、注意しなければいけない。j = i, k = x - i - jとして問題のあるi,j,kを省いたけど、j = i + 1, k = j + 1で全探索して数えたほうが楽。

  • 提出コード

AIZU ONLINE JUDGE: Code Review

  • 参考サイト

AOJ Course ITP1_7_B How many ways? - けんちょんの競プロ精進記録

2.AtCoder Beginner Contest 106 B - 105
  • 問題リンク

B - 105

  • メモ

Nの約数を全列挙するアルゴリズムを使う問題。Nの約数の全列挙の効率的なアルゴリズムの計算量はO(√N)である。効率的でないアルゴリズムの計算量はO(N)である。

  • 提出コード

Submission #16922721 - AtCoder Beginner Contest 106

  • 参考サイト

N の約数を全列挙するアルゴリズム | アルゴリズムロジック

  • 関連問題

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ITP1_3_D&lang=ja
B - 完全数

3.AtCoder Beginner Contest 122 B - ATCoder
  • 問題リンク

B - ATCoder

  • メモ

切り分けられる文字列全てを取り出し、その文字列が条件を満たすか調べていた。これでもACできるが、解説動画で紹介されていたやり方のほうが計算量も少なくて済みそうだし書くのも楽だと思った。文字列について、それぞれの文字が条件を満たすかどうか(ATCG文字かどうか)を01ビット列に変換して最長な1の数列の長さを求める。

  • 提出コード

Submission #16922721 - AtCoder Beginner Contest 106

4.パ研杯2019 C - カラオケ
  • 問題リンク

C - カラオケ

  • メモ

全探索を実装するだけ。特に必要な知識は無し。

  • 提出コード

Submission #16933230 - パ研合宿2019 第3日「パ研杯2019」

全探索:工夫して通り数を減らす全列挙

5.AtCoder Beginner Contest 095 C - Half and Half
  • 問題リンク

C - Half and Half

  • メモ

答えとして取りうる組み合わせを全部試して、最小値を出力すればよい。

  • 提出コード

Submission #16933597 - AtCoder Beginner Contest 095

6.三井住友信託銀行プログラミングコンテスト 2019 D - Lucky PIN
  • 問題リンク

D - Lucky PIN

  • メモ

単純に文字列Sから3桁を取り出して全ての組み合わせ計算をすると(3x10^4)C3≒10^12で間に合わない。だけど、そもそも、3桁の暗証番号は各桁0-9だから組み合わせは10^3通りしかなくて、その暗証番号が文字列Sにその順番通りに存在するか各桁ごとに全探索すれば、計算量は最大でもO(10^3*30000)≒O(10^7)だから間にあう。

  • 提出コード

Submission #16934841 - Sumitomo Mitsui Trust Bank Programming Contest 2019

7.JOI 2007 本選 3 - 最古の遺跡
  • 問題リンク

C - 最古の遺跡

  • メモ

単純に全ての点から4つの点の組み合わせをすべて全探索するとO(NC4)となりこれはO(3000C4)≒O(10^12)で当然間に合わない。ここで、思いつくのは正方形は連続する2頂点が決まれば、残りの2頂点は反時計回りに90度または-90度回転の2通りに決まる。また、座標xyはともに0-5000であることから、bool型の二次元配列bxyを作って、その座標に点が存在すればtrue、その座標に点が存在しなければfalseを代入する。そうすれば、任意の座標に点が存在するかしないかはO(1)で求められる。よって、すべての点から2つの点の組み合わせを選び、その2点を連続する頂点とする正方形は2通り存在できる。それらの正方形がそれぞれ存在するための必要純分条件は残りの2頂点が存在するかであるから、これは先ほどの二次元配列bxyを使えばO(1)で調べられる。以上の考え方で全探索した。
補足で書くが、私の提出コードを確認してもらえばわかるが自分の解き方では、少し込み入って行っていて面倒である。しかも、先ほど言及していたそれぞれの正方形の残りの2頂点の座標を求める式について、図を描いて考えていた(高校数学的気分)。しかし、大学で学ぶ回転行列を使えばもっと簡単に残りの頂点の座標を考えることができる。回転行列の考え方の気持ちを下式に示す。図も含めて説明を書きたいところだが、めんどくさいので省略します。すいません。参考リンクを載せておくので、それでお願いします。
\begin{pmatrix}
cos\theta & -sin\theta \\
sin\theta & cos\theta \\
\end{pmatrix}
\begin{pmatrix}
dx \\
dy \\
\end{pmatrix}
\begin{eqnarray}
\theta = 90^\circ, -90^\circ
\end{eqnarray}
よって
\begin{pmatrix}
0 & -1 \\
1 & 0 \\
\end{pmatrix}
\begin{pmatrix}
dx \\
dy \\
\end{pmatrix}
=
\begin{pmatrix}
 -dy \\
dx \\
\end{pmatrix}
または
\begin{pmatrix}
0 & 1 \\
 -1 & 0 \\
\end{pmatrix}
\begin{pmatrix}
dx \\
dy \\
\end{pmatrix}
=
\begin{pmatrix}
dy \\
 -dx \\
\end{pmatrix}

  • 提出コード

Submission #16937602 - 第6回日本情報オリンピック 本選(オンライン)

  • 参考リンク

【Python】JOI 2007 本選 3 - 最古の遺跡(①高校数学ベクトル、②「in リスト」は激遅)【AtCoder】 - Qiita
Ruined Square [AtCoder Beginner Contest 108 B] - はまやんはまやんはまやん
https://www.ioi-jp.org/joi/2006/2007-ho-prob_and_sol/2007-ho-review.pdf

  • 関連問題

B - Ruined Square

8.Square869120Contest #6 B - AtCoder Markets
  • 問題リンク

B - AtCoder Market

  • メモ

確かに、工夫するとO(30*30)で全探索できる。最初にやり方を思いついた時、ホントにあっているのか少し不安に思った(証明できるのかなと思った)が入力例が思いついた方法の通りだったのでこれならあってるはずだと思って実装して提出したら、ACした。入力例を見ることも非常に重要である。それぞれ、入口は配列A、出口は配列Bから任意の一つの座標を選びその入口と出口の移動時間を調べて、最小の移動時間を出力すればよい。移動時間はA[i] < B[i]よりO(1)で計算できる。

  • 提出コード

Submission #16990550 - square869120Contest #6

9.JOI 2008 予選 4 - 星座探し
  • 問題リンク

D - 星座探し

  • メモ

制限時間10sになっていたのを見逃していて、いつも通り制限時間2sで考えていた。制約はちゃんと見ましょう。JOIの予選は制限時間がないらしいです(解説に書いてた)。ただ、制限2sでも解けるので問題はなかった。単純に全探索するとO(MN^2)≒O(2*10^8)となる。これは10sくらいかかる。効率よく全探索するとO(MNlogN)≒O(2*10^6)となり間にあう。星座の一つの点を決めて、任意の星を一つ選びその星を先ほどの星座としてみなし、移動量dx,dyを求める。その後そのdx,dyをそのほかの星座の座標に足して、その座標に星が存在するかを調べる。星座すべてが存在すれば良い。

  • 提出リンク

Submission #16975205 - 第7回日本情報オリンピック 予選(オンライン)

全探索:ビット全探索

10.ALDS_5_A - 総当たり
  • 問題リンク

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=ALDS1_5_A&lang=ja

  • メモ

dfsで部分和問題を解く。setに可能な部分和を保存した。

  • 提出リンク

AIZU ONLINE JUDGE: Code Review

11.AtCoder Beginner Contest 128 C - Switches
  • 問題リンク

C - Switches

  • メモ

bit全探索。

  • 提出リンク

Submission #18392443 - AtCoder Beginner Contest 128

ローベルの入門講座を読んで

本記事について

自分用のメモを残します。自分が知らなかったことやあやふやな部分をメモする。

メモ

Chapter1

01-02
endlを書いていないと文字が出力されない場合がある。改行しない場合には"flush"というものをが用意されている。

Chapter2

02-04
C言語の場合には、引数なしの関数にする場合には引数のかっこの中に"void"を書くようにする。そのほうが無難である。詳細は付録Cを参照。
02-05
初期化処理を書いていない場合は、グローバル変数(関数外で宣言した変数)は勝手に0で初期化される。ローカル変数(関数内で宣言した変数)は何が入っているか分からない。
02-07
1<=a<=5は(1<=a)<=5と同じになり、何をしているか分からなくなる。(構文解析?)
02-10
配列外参照を"バッファオーバーラン"あるいはブッファオーバーフロー"と言う。配列外参照が原因のバグは非常に見つけづらい。
配列変数を宣言するときには、[]の中に変数は入れられない。
02-12
for文でfor(初期設定文; 条件式; 再設定式) { 実行文 } について再設定式を複数指定したい場合には核再設定式をコンマで区切って列挙する。
昔のC言語では、初期設定文で変数を宣言することができなかった。しかし、新しいC言語の仕様(C99)では宣言できるようになった。
02-15
switch文でcase 値: 実行文について値には低数式しか使えず、変数や関数の戻り値は使用できない。
continue文はループ文でないswitch文には効力を持たず、その外のループ文に対して効力を持つ。

Chapter3

03-01
各環境での型のバイト数はsizeofという演算子で取得できる。sizeofのあとにカッコつきで型名を書けば、その型のサイズを取得できる。また、sizeofの後に変数名を書けば、その変数のサイズを取得できる。この場合はかっこは必要ない。

Chapter4
Chapter5

2020/9/22最終更新