図書館クラウドソーシングプロジェクトL-CrowdにおけるAIワーカの公募について
概要
図書館クラウドソーシングプロジェクトL-Crowd
では,京都府総合目録の作成支援タスクを行っていただく
AIワーカ
のボランティアを募集いたします.
ここでは,その参加方法について説明いたします.
なお近日中に,よりよいAIワーカ作成のためのコンペティションを開催いたします.詳細は後日アナウンスいたします.
目次
- 京都府総合目録プロジェクトにおけるワーカの作業内容
- AIワーカの一般的な参加手順
- 京都府総合目録プロジェクト固有の内容(本プロジェクトのAIワーカの作成をされる方はここまでご覧ください)
1.京都府域総合目録プロジェクトにおけるワーカの作業内容
二つの書誌(図書に関する情報)を比較し,これらが同じ本か違う本かを判断します
次のボタンを押すと,実際のタスクを試す事ができます
タスクを行う
2. AIワーカの一般的な参加手順
本プロジェクトでは,上記の作業をボランティアで行っていただけるAIワーカを公募いたします.AIワーカが行う作業は,上記1.で人間が行う作業と同じです.
次の手順で行ってください
-
Crowd4Uにアカウントを作成してください.AIワーカとして申請する場合には,名前(ハンドルネーム可)の入力をお願い致します.
-
アカウントを作成する際に,「AIワーカとして登録を申請する」と書いているチェックボックスをチェックしてください.このときにはチェックせず,後で申請することも可能です.申請が承認されるとメールが届きます.承認メールが届くまでに1週間ほどかかる場合があります.
- ワーカのAPIガイドをご覧ください.PythonライブラリのAPIラッパー関数を利用してAIワーカを構築します.ただし,後述するように,京都府総合目録プロジェクト専用のAIワーカを作成するためのテンプレートを用意しましたので,そちらを利用すると簡単にAIワーカを作成できます.
-
AIワーカを公募しているプロジェクト一覧と,AIワーカとクラウドソーシングプロジェクトが通信を開始するためのAPIを呼び出すときに必要なパラメータなどの情報は,AIワーカの登録完了メールと共にお送りします.
-
APIを利用してAIワーカがタスクをリクエストするとタスクの情報を受け取ることができますが,全てのタスクを行なう必要はありません.自信があるタスクだけを行ない,自信がないタスクは行なう必要はありません.その場合は,タスクをスキップしてください(やり方は次に示します)
3. 京都府総合目録プロジェクトにおけるタスク固有の内容
-
本プロジェクトのAIワーカを実装する際には,タスクの取得数を最大3000にしてください(回答せずにスキップしたタスクの数も含みます).
-
本プロジェクトに関しては,(3a)直接APIやPython APIラッパーを利用してAIワーカを作成する
方法,に加えて,(3b)それを行なわず,簡単に本プロジェクトのAIワーカを利用するためのPythonコードテンプレートを用意しました.
後者のほうが簡単です.それぞれの説明を下記で行ないます.
3a. PythonのAPIラッパーを利用して,一から作る場合
AIワーカには次の作業をさせてください.
-
まず,このプロジェクトとAIワーカが通信を開始するためのAPI(もしくは関数)を呼び出してください.そのプロジェクトとやりとりするオブジェクト(c4uprojectクラス)が返ります.
-
次に,そのオブジェクトにタスクをリクエストするメソッドを呼びだしてください.タスクを表すオブジェクト(c4utaskクラス)が返ります.タスクがない場合にはnilが返ります.
-
c4uprojectクラスのオブジェクトの結果を返すメソッド(postanswerメソッド)を呼んでください.その際,次の3つのいずれかで回答してください.
-
二つの書誌が同じ場合にはis_sameを"TRUE"にし,is_skippedパラメータを"FALSE"にして送信ください.
-
二つの書誌が違う場合には,is_sameを"FALSE"にし,is_skippedパラメータを"FALSE"にして送信してください.
-
タスク結果に自信がないなどの場合は,タスクをスキップしてください.具体的には,is_skippedパラメータを"TRUE"にして送信してください (このとき,is_sameはnilにしてください
-
APIやPython APIラッパーライブラリの詳細は,ワーカのAPIガイドをご覧ください.
3b. 京都府総合目録プロジェクトのAIワーカテンプレートを利用する場合
京都府総合目録プロジェクトのAIワーカには,専用のテンプレートを用意しました.
具体的には,WorkerBaseインターフェースをオーバーライドすることで簡単に実装することができます.
オーバーライドするメソッドはtrainメソッド,outputメソッドの2つです.
シンプルなAIワーカの開発
ここでは,シンプルなAIワーカの開発例を紹介します.
シンプルなAIワーカは,受け取った2つの書誌情報の本のタイトルが同じなら,同じ書誌とみなし,
そうでないなら違う書誌とみなします.
以下がシンプルなAIワーカの実装になります.
# -*- coding: utf-8 -*-
from workers.worker_base import WorkerBase
class AlgorithmWorker(WorkerBase):
def train(self, book1, book2, result):
pass
def output(self, book1, book2):
answer = False
if book1["title"] == book2["title"]:
answer = True
return answer
trainメソッド
-
目的:trainメソッドに渡される書誌情報から学習モデルを作成します.※シンプルなAIワーカでは利用してません
-
引数:書誌情報オブジェクト1, 書誌情報オブジェクト2, 結果情報オブジェクト
-
返り値:なし
書誌情報オブジェクトは辞書型で,以下の形で渡されます.
{
"bib_id": "",
"title": "",
"volume": "",
"responsibility": "",
"publisher_name": "",
"issued": "",
"isbn": "",
"origin_name": "",
"origin_id": "",
"origin_url": "",
}
結果情報は実際にクラウドソーシングに参加したワーカが答えた解答データです.
結果情報オブジェクトは辞書型です.is_same, is_skipped それぞれBool値が入ります.
-
is_same: Trueなら2つの書誌は同じとユーザが答えたことを意味します
-
is_skipped: Trueならユーザは書誌が同じかどうかわからなかったということを意味します
-
なお,is_same,is_skippedの両方がNoneであるとき,2つの書誌は異なることを意味します.
例えば以下のような値が入っています.以下の場合は2つの書誌が同じである,とユーザが解答したことを意味します.
{
"is_same": True,
"is_skipped": None
}
outputメソッド
-
目的:渡される2つの書誌情報が,同じものか否かBoolで解答します
-
引数:書誌情報オブジェクト1, 書誌情報オブジェクト2
-
返り値:Bool