Twitterプロファイラver2作成プロジェクト基本情報プロジェクト名Twitterプロファイラver2作成開発区分 / Division dịch - Twitterプロファイラver2作成プロジェクト基本情報プロジェクト名Twitterプロファイラver2作成開発区分 / Division Việt làm thế nào để nói

Twitterプロファイラver2作成プロジェクト基本情報プロジェクト

Twitterプロファイラver2作成プロジェクト
基本情報
プロジェクト名
Twitterプロファイラver2作成
開発区分 / Division
SI開発(バッチ処理)
窓口担当
Itaru Suzuki
全体概要
現在,DSのいくつかのサービスでは,ユーザのbioおよびツイートからユーザの性別・年代を推定してその情報を利用しています. ここで言う年代とは,ユーザが10代,20代,...,50代のいずれであるかということです. 以降,ユーザの性別・年代情報を『プロファイル』,ユーザのプロファイルを推定するためのプログラムを『プロファイラ』と呼びます.

現在のプロファイラはユーザのプロファイルのうち,性別を80%正しく,年代を50%正しく判定することができます. これは十分に信頼できる値とはいえず,より精度を上げていきたいと考えています.

そこで,現在の手法とは別の手法を使ったプロファイラの作成をお願いしようと思います.

目的
RAWデータ(Twitterから供給される生のツイートデータ,Twitterの10%データ) を読み込み,ユーザのプロファイルを推定するプログラムを作成すること.

依頼作業範囲
このプロファイラは最終的に推定結果をデータベースに格納しますが, データベースへの接続部分はこちらで作成します. DSVにはそれ以外の部分全ての作成をお願いします.

### 納期 12月8日(月)を納期とします. ### 納品 Bitbucketにリポジトリを作成します. そこに成果をコミットしてください.
プロジェクト体制
DS側担当者
Itaru Suzuki
DSV側担当者
XXX
コミュニケーションプラン
毎週月曜日にDS側担当者まで進捗を報告してください. また,そのときにコードをコミットしてください.

システム概要
開発システム概要
今回作成したいのは,RAWデータを読み込み,そのbioと本文からプロファイルを推定し,結果をファイルに書き出すプログラムです.

その動作は次のようになります.

RAWデータを読み,そこからbioと本文を抽出します
ルールに基づいてプロファイルを推定します
プロファイルの推定に失敗した場合,ベイジアンフィルタによりプロファイルを推定します
結果をファイルに書き出します
開発範囲
RAWデータを読み,ツイートを表すオブジェクトを返すクラスRawDataParserはDS側で実装します.その他の部分についてはDSVでの開発をお願いします.

理由がない限り,RawDataParserを変更しないでください.

アーキテクチャ
### ハードウェア仕様 未定です.
ソフトウェア仕様
開発言語はJavaです.バージョン8に準拠してください.
機能外要件
性能要件
一度に1日分,144個のファイルを処理します
メモリ使用量は2GB以下であることを目標としてください
処理はどんなに長くとも1日で終了する必要があります
このような仕様になっている理由は,同じような条件で現在稼働している古いプロファイラを置き換えることを期待しているためです.

機能設計
全体の動作と対応するクラス
プログラム全体の処理は上述のように動作します.

これらの処理は,それぞれ次のクラスが受け持つものとします.

RawDataParser
RuleBaseClassifier
BayesianClassifier
ResultWriter
また,mainメソッドを持ち,コマンドラインから呼び出されるクラスは,ProfilerToplevelとしてください.

プロファイルについて
プロファイルは列挙型Profileで表現してください.その値はM10,M20,...,M50,F10,F20,...,F50,およびUNKNOWNです.

RuleBaseProfilerの動作
概要
ツイートのbioに特定の文字列が入っているかどうかでプロファイルを推定するプロファイラを表現したクラスです.



classifyメソッドは,ツイートを表すオブジェクトを受け取り,それをポストしたユーザのプロファイルをルールに基づいて推定して返します. この時nullを返すことは許されません.

このクラスはコンストラクタでFileオブジェクトを受け取り,その中に書かれた分類ルールを読み込む必要があります.

ルールファイルの書式
ルールファイルには,1行に1つのルールが記述されています. ルールはキーワード,性別,年代をタブで区切ったもので,bioにキーワードが含まれる時,そのbioを書いたユーザは対応するプロファイルであると推測されます. もし,性別,年代のどちらか一方だけを推測でき,他方はわからない場合,分からない方は*と表現されます.

その内容は例えば次のようになります.

男子高生 M 10
女子高生 F 10
高校生 * 10
男子 M *
女子 F *
これは次のようなルールを表現しています.

bioに「女子高生」が含まれている
「女性10代」
bioに「高校生」が含まれている
「性別不詳の10代」
bioに「男子」が含まれている
「男性で年代不詳」
bioに「女子」が含まれている
「女性で年代不詳」
次のような場合,初期化時に例外を発生させるべきです

ルールファイルに同じキーワードが出現していた場合
性別として解釈できない文字列が含まれていた場合
年代として解釈できない文字列が含まれていた場合
ルールファイルは空白文字とコメントについて次の仕様に従います.

キーワード,性,年代を表している各文字列の前後の空白文字は消去したあと解釈されるものとします
空白文字しか含まれない行(空行)はエラーとならず単に無視します
半角シャープ(#)から行末まではコメントです.空白として扱ってください
余分な空白やコメントを許容するのは,ルールを書きやすくするためです.

次のようなルールは無意味なものとして無視してください

キーワードが空白しか含まない場合
性別,年代が両方*であるような場合
また,次のようなフォーマットは特別扱いしてください.

正しいキーワード,性別,年代の後に続けてタブと文字列が続く場合,年代のあとのタブ以降の文字列は無視してください.これは,ルールに新たな項目を付け加える場合を考えてのことでする.
上記以外で形式に従わない場合はすべてエラーとして初期化時に例外を発生させるべきです

ルールの解釈
どのルールも当てはまらなかった場合,そのユーザのプロファイルはUNKNOWNです.

1つ以上のルールが当てはまり,それらが矛盾せず,また性別・年代が共にわかった場合,そのユーザのプロファイルはUNKNOWNでないどれかのプロファイルになります. たとえば,「女子高生」をbioに含む場合,そのユーザのプロファイルはF10(女性10代)です. あるいは,「女子」と「高校生」をbioに含む場合,そのユーザのプロファイルはF10(女性10代)です.

当てはまる全てのルールを使っても性別あるいは年代が不詳だった場合,そのユーザのプロファイルはUNKNOWNです. 例えば「高校生」だけが当てはまった場合は,性別不詳となるため,UNKNOWNとします.

もし矛盾する複数のルールがヒットした場合は,UNKNOWNと推測されるべきです. 例えば「男子高生」と「女子高生」が同時に含まれていた場合はUNKNOWNとなります.

テスト観点
正常系
次のようなルールファイルによってインスタンスが正常に初期化されることを確認してください.

空のファイル
正しいフォーマットのルールのみを含む
キーワード,性別,年代の前後にタブ以外の空白を含む
空行を含む
コメントを含む
追加のカラム(年代の後に続くタブと任意の文字列)がある行を含む
classifyメソッドが,次の場合に正しく動作することを確認してください.

ルールファイルにルールが1つもない場合.メソッドは常にUNKNOWNを返すはずです.
ルールが1つもあてはまらない場合
ルールが1つだけ当てはまり,それによってプロファイルが確定する場合
ルールが1つだけ当てはまり,性別か年代が不詳である場合
ルールが2つ以上当てはまり,それによってプロファイルが確定する場合
ルールが2つ以上当てはまり,性別か年代が不詳である場合
異常系
次の場合,例外を発生させるべきです.

初期化時,ルールファイルの書式が異常である場合
BayesianClassifierの動作
概要
ツイートのbioおよび本文に出現する名詞に関して,それらがあるプロファイルに特徴的な名詞であるかどうかを調べることでプロファイルを推測するプロファイラを表現したクラスです.



このクラスはコンストラクタでFileオブジェクトとしきい値を受け取り,Fileオブジェクトに書かれた各プロファイルごとの単語の出現数をロードする必要があります.

classifyメソッドは,ツイートを表すオブジェクトを受け取り,それをポストしたユーザのプロファイルをルールに基づいて推定して返します. この時nullを返すことは許されません.

判定手順
BayesianClassifierは,すべてのプロファイルについて,あるツイートがそのプロファイルに属する確率を計算し,それがもっとも高いプロファイルを返すことでツイートをポストしたユーザのプロファイルを推定します.

この判定手順は,A plan to spam(http://www.paulgraham.com/spam.html)を参考にしています. これと矛盾している,間違ったアルゴリズムを使っていると思われる場合は教えてください.

その手順は次のようになります.

ツイート1つについて,それが男性のものである確率,女性のものである確率,10代のものである確率,20代のものである確率,...,50代のものである確率を計算する
ユーザの性別について,確率の高い方を選ぶ.ただし,設定されたしきい値を下回った場合は不明扱いにする
ユーザの年代について,確率の高い方を選ぶ.ただし,設定されたしきい値を下回った場合は不明扱いにする
性別・年代が確定したら,対応したプロファイルを返す.どちらか一方でも不明であった場合はUNKNOWNを返す
あるツイートが,ある属性を持つユーザの(例えば男性の)ツイートである確率は,次のように計算します.

ツイートのbioと本文を形態素解析し,出現する名詞をリストアップする
ある単語wについて,それをポストしたユーザの 属性がpである確率を式1により求める. これをprob(p,w)とする.
|prob(p,w) - 0.5|が大きい順に,最大で15個の名詞を選ぶ. ただしこの値が0であるものは除く. 名詞の集合をWとする.
Wから,ツイートをポストしたユーザの属性がpである確率を,式2によって計算する.
プロファイルのうちもっとも確率の大きなものを返すただしこのとき,しきい値を超えない場合はUNKNOWとして返す.
プロファイルを判定する時,性別と年代を別々に判定するのではなく,M10である確率,M20である確率……というように判定する方法も考えられますが,そうしない理由は,それではデータ量が少なくなりすぎるからです.

男性でなければ女性であるという判定を行わない理由は,男性のものとも女性のものともわからない発言があると思われるからです.

式1
pでない属性をall_but(p)とする.

属性kを持つユーザによってポストされたツイートの中に単語wが出現した回数をnum(k,w),属性kを持つユーザによってポストされたツイートの総数をallnum(k)とする.

すると式1は次のように表現できる.

def prob(p,w) :
if num(p,w) + num(all_but(p),w) < 5 :
return 0.5
p_prob = min(1, 2 * num(p,w) / allnum(p))
q_prob = min(1, num(all_but(p),w) / allnum(all_but(p)))
return min(0.99, max(0.01, p_prob / ( p_prob + q_prob )))
式2
単語wを含むツイートをポストしたユーザが属性pを持つ確率をprob(w,p)とすると,式2は次のように表現できる.

def expr2(W, p) :
p_prob = 1
for w in W :
p_prob = p_prob * prob(w,p)
n_prob = 1
for w in W :
n_prob = n_prob * (1 - prob(w,p))
return p_prob / ( n_prob + p_prob )
初期化に使用されるファイルの書式
BayesianClassifierが初期化時に受け取るファイルは, 属性の一覧,各属性に属する総ツイート数, および単語と,プロファイルごとの出現数が記録されたCSVファイルです. ファイルはUTF-8でエンコードされているものとします.

具体的には,ファイルの内容は次のようになります.

profiles,M,F,10,20,30,40,50
num_of_tweets,172,139,172,93,129,126,87
word1,72,31,38,82,59,109,22
この場合,1行目が属
0/5000
Từ: -
Sang: -
Kết quả (Việt) 1: [Sao chép]
Sao chép!
Twitter hồ sơ ver2 tạo ra dự ánThông tin cơ bảnTên dự ánTạo một hồ sơ Twitter ver2Bộ phận phát triển / bộ phậnSI phát triển (xử lý hàng loạt)Liên hệHinoue SuzukiTổng thể tóm tắtHiện nay, phục vụ một số DS, tiểu sử người dùng và Tweet ước tính từ của người dùng giới tính, tuổi, và sử dụng thông tin đó để. Và nói ở đây là những người dùng thanh thiếu niên và 20-somethings,..., 50-somethings mà làm, hoặc là. Kể từ khi người dùng giới tính và tuổi ước tính "cấu hình", chương trình thông tin hồ sơ người dùng được gọi là "Hồ sơ".Hồ sơ hiện tại có thể cấu hình ra, tình dục - 80% một cách chính xác, 50% một cách chính xác xác định độ tuổi để. Hơn nữa, nó có thể không và giá trị bạn có thể tin tưởng đủ để tin rằng và muốn nâng cao độ chính xác của họ.Tôi đã cố gắng để yêu cầu hồ sơ bằng cách sử dụng một phương pháp và phương pháp hiện tại bằng cách tạo ra.Mục đíchĐể thực hiện chương trình tải nguyên dữ liệu (nguyên tweets dữ liệu được cung cấp bởi Twitter, Twitter của 10% dữ liệu), để ước tính của người dùng hồ sơ.Phạm vi yêu cầuHồ sơ này cuối cùng ước tính kết quả cơ sở dữ liệu chứa phần của kết nối với cơ sở dữ liệu được tạo ra ở đây. DSV hãy tạo ra tất cả các bộ phận khác.### Giao hàng 12/8 (thứ hai), ngày giao hàng và. Tạo một kho lưu trữ trên Bitbucket ### giao hàng. Cam kết quả có.Cơ cấu dự ánDS bên đại diệnHinoue SuzukiNhân viên phía DSVXXXKế hoạch truyền thôngHàng tuần báo cáo một sự tiến bộ đại diện DS mặt vào ngày thứ hai. Ngoài ra, cam mã ở thời điểm đó.Hệ thống tổng quanPhát triển hệ thống tổng quanChúng tôi muốn tạo ra là một chương trình tải dữ liệu thô, và ước tính các cấu hình từ sinh học và văn bản đầy đủ, được viết vào một tập tin kết quả.Hành vi trông như thế này.Đọc dữ liệu thô, chiết xuất tiểu sử và toàn bộ nội dung từ đóHồ sơ ước tính dựa trên quy tắcHồ sơ dự toán không thành công, ước tính cấu hình bởi bộ lọc BayesXuất khẩu các kết quả để nộpPhát triển phạm viThực hiện lớp RawDataParser trả về một đối tượng đại diện cho các Tweets, đọc các dữ liệu thô trên DS. Đối với một phần khác xin vui lòng phát triển trong DSV.Miễn là không có không có lý do, không thay đổi RawDataParser.Kiến trúc### Phần cứng specs là TBD.Thông số kỹ thuật phần mềmPhát triển ngôn ngữ là Java. Xin vui lòng phù hợp với phiên bản 8.Bên ngoài các tính năng yêu cầuYêu cầu thực hiệnĐồng thời 1 phút, 144 tập tin xử lýSử dụng bộ nhớ là 2 GB hoặc ít hơn mục tiêu để làm hài lòngPhải một ngày kết thúc xử lý không có vấn đề bao lâuNhững lý do cho đặc điểm kỹ thuật dự kiến sẽ thay thế hồ sơ cũ hiện đang chạy trong các điều khoản tương tự đối với.Chức năng thiết kếĐể phù hợp với hành vi của các lớp học toàn bộToàn bộ chương trình làm việc như mô tả ở trên.Mỗi trong số này là chịu trách nhiệm cho các lớp học sau.RawDataParserRuleBaseClassifierBayesianClassifierResultWriterNgoài ra, cố gắng để ProfilerToplevel các lớp học có phương pháp chính, gọi là từ dòng lệnh.Về hồ sơCấu hình đại diện cho hồ sơ loại liệt kê. Giá trị của nó là, M10, M20,..., M50, F10, F20,..., F50, và không biết.RuleBaseProfiler hành viTổng quanGiai cấp đại diện cho hồ sơ để ước tính các hồ sơ có chứa sinh học đã chỉ định văn bản Tweet hay không.phân loại phương pháp mất đối tượng đại diện cho tweet, trả lại, ước tính theo quy định rằng nó đăng hồ sơ người dùng. Không được phép trở về null tại thời điểm này.Bạn phải tải phân loại quy tắc đã được viết bằng, lớp này mất đối tượng tập tin trong các nhà xây dựng.Quy tắc định dạng tập tinTệp Qui tắc chứa, một quy tắc cho mỗi dòng. Inferred quy tắc, người sử dụng khi từ khoá được bao gồm trong sinh học, đã viết sinh học trong tab-delimited hồ sơ tương ứng từ khóa, giới tính và tuổi tác. Nếu các được biểu thị dưới * và nếu bạn có thể đoán chỉ hoặc giới tính và tuổi tác, mặt khác không biết, không biết làm thế nào.Nội dung của nó cho ví dụ: trông giống như.Cậu bé Trung học M 10Sinh trung học F 10Học sinh trung học * 10Quần M *Nữ F *Điều này thể hiện các quy tắc sau đây.học sinh trung học trong sinh học10 tỷhọc sinh trung học trong sinh học"Không biết tình dục thiếu niên"chàng trai trong sinh học"Con người không xác định"'cô gái' trong sinh học' Phụ nữ trong độ tuổi không được báo cáo 'Nếu bạn thích, trong quá trình khởi tạo nên nâng cao một ngoại lệNếu bạn có cùng một từ khoá xuất hiện trong tệp quy tắcNếu chuỗi không thể được hiểu là một giới tính được đính kèmNếu chuỗi không thể được hiểu là lứa tuổi được đính kèmCác quy tắc về khoảng trắng và ý kiến thực hiện theo các thông số kỹ thuật sau đây.Xóa trống trước và sau khi mỗi chuỗi đại diện cho một từ khóa, tuổi, và được hiểu là cácVà lỗi, chỉ cần bỏ qua dòng có chứa chỉ khoảng trắng (dòng trống)Từ nửa pound (#) là một bình luận cho đến cuối dòng. Xin vui lòng điều trị như một trốngĐể cho phép ý kiến và khoảng trắng phụ là để dễ dàng viết quy tắc.Xin vui lòng bỏ qua như vô nghĩa quy tắc chẳng hạn như:Nếu từ khóa không chứa chỉ khoảng trắngGiới tính, tuổi tác, cả hai * như cóNgoài ra, đặc biệt định dạng như: xử lý xin vui lòng.Nếu các chuỗi theo sau một tab, theo sau là các từ khóa chính xác, giới tính, tuổi, bỏ qua các chuỗi sau khi tab tuổi sau khi. Để suy nghĩ về nếu này tack, ghi một quy tắc mới.Nếu bạn không làm theo các định dạng khác với tất cả ở trên là một lỗi trong quá trình khởi tạo ngoại lệ tăng nênGiải thích các quy tắcNếu bạn ăn cắp bất kỳ quy tắc, Hồ sơ người dùng không biết.Áp dụng một hoặc nhiều quy tắc, phù hợp với họ, nếu bạn tìm thấy cả hai giới tính và tuổi tác, Hồ sơ người dùng cũng không không biết bất kỳ cấu hình. Ví dụ, nếu học sinh trung học với sinh học, Hồ sơ của người dùng là F10 (teen girls). Hoặc, bao gồm cả học sinh trung học với một sinh học 'nữ', Hồ sơ người dùng là F10 (teen girls).Nếu bạn cũng sử dụng tất cả quy tắc là đúng giới tính hoặc tuổi không được báo cáo, Hồ sơ người dùng không biết. Ví dụ cho học sinh trung học chỉ áp dụng nếu giới tính chưa biết, và chưa biết.Nếu nếu bạn nhấn nhiều quy tắc xung đột, nên được suy ra là chưa biết. Ví dụ nếu các bé trai cao trường học và trường trung học sinh viên đồng thời là chưa biết.Kiểm tra quan điểmHệ thống bình thườngĐảm bảo rằng trường hợp được khởi tạo đúng bởi các quy tắc như sau.Một tập tin rỗngCó chứa chỉ là các quy tắc chính xác định dạngChứa các tab ngoại trừ trống trước và sau khi từ khoá, giới tính, tuổiTrong đó có hàng trống nàoBao gồm cả các ý kiếnThêm cột (tab theo tuổi và bất kỳ chuỗi ký tự) có chứa dòngXin vui lòng kiểm tra, phân loại các phương pháp để hoạt động được nếu sau đây.Nếu các quy tắc không phải là tệp Qui tắc. Phương pháp nên luôn luôn trở lại chưa biết.Trường hợp nơi một quy tắc duy nhấtNếu chỉ có một quy tắc áp dụng, chấp nhận hồ sơNếu chỉ có một quy tắc áp dụng, đó là giới tính hoặc tuổi không được báo cáoNếu các quy tắc áp dụng ít nhất hai, chấp nhận hồ sơNếu các quy tắc hơn một áp dụng, không được báo cáo bởi giới tính hoặc tuổiLoạt các bất thườngNếu sau đây nên là một ngoại lệ.Nếu các quy tắc tập tin định dạng bất thường lúc khởi tạo thời gian,BayesianClassifier hành viTổng quanHồ sơ danh từ sinh học tweets và văn bản xuất hiện, họ đã bày tỏ hồ sơ để đoán cấu hình bằng cách kiểm tra cho dù các lớp học đặc trưng danh từ.Bạn cần phải tải một số lần xuất hiện của từ viết bằng một đối tượng tập tin cho mỗi cấu hình mỗi, lớp này mất tập tin đối tượng và ngưỡng trong các nhà xây dựng.phân loại phương pháp mất đối tượng đại diện cho tweet, trả lại, ước tính theo quy định rằng nó đăng hồ sơ người dùng. Không được phép trở về null tại thời điểm này.Quyết định quy trìnhBayesianClassifier, tính toán xác suất của tất cả các thông tin hồ sơ, thuộc cấu hình đó một tweet, ước tính các Tweets đăng bằng cách trả lại nó là hồ sơ người dùng hồ sơ cao nhất.Thủ tục quyết định này là một kế hoạch để thư rác (http://www.paulgraham.com/spam.html) đề cập đến. Xin vui lòng cho tôi biết nếu bạn dường như sử dụng các thuật toán sai mâu thuẫn với điều này.Các thủ tục trông như thế này.Để tính toán xác suất cho một tweet, nó là người đàn ông, các xác suất của phụ nữ trong, xác suất của thiếu niên, xác suất của 20-somethings, xác suất... fifties trongVề giới tính của người dùng, chọn một xác suất cao. Tuy nhiên, nếu falls dưới ngưỡng thiết lập để xử lý không rõTuổi của người dùng, chọn một xác suất cao. Tuy nhiên, nếu falls dưới ngưỡng thiết lập để xử lý không rõTrả về tương ứng, xác định cấu hình giới tính và tuổi tác. Trở lại chưa biết nếu một trong hai là không rõ ràng nhưng một) ( Ví dụ quần tweets một tweet, với một xác suất thuộc tính được tính như sau.Vào danh sách danh từ tweets sinh học và phân tích hình Thái văn bản đầy đủ, và xuất hiệnCác thuộc tính của một người dùng đăng nó về một chữ w, p xác suất cho công thức 1. Và prob (p, w) để làm điều này.| prob (p, w)-0.5 | tối đa, trong thứ tự giảm dần bằng cách chọn 15 danh từ. Ngoại trừ những gì giá trị này là 0. Danh từ tập thể để W.Bởi phương trình 2 tính toán xác suất bạn gửi tweets từ W, thuộc tính người dùng trong các p.Chỉ khi ngưỡng này không vượt quá nếu các cấu hình của hầu hết các tỷ lệ cược lớn để trở về sự trở lại như UNKNOW.Xác suất chứ không phải thời gian để xác định các hồ sơ, giới tính và tuổi để xác định một cách riêng biệt M10, M20 xác suất. Và các lý do như vậy không phải để làm như vậy có thể là cách để xác định, do đó, từ các dữ liệu khối lượng là quá thấp.Tại sao các bản án ở nam giới là người đàn bà, và một trong những người đàn ông là từ dường như đã nói và những gì phụ nữ không biết.Công thức 1all_but (p) với các thuộc tính trong các p.Tổng số Tweets đăng bởi người dùng với thuộc tính k lần xuất hiện của từ w là trong các tweet đã được đăng bởi người dùng có thuộc tính k num (k, w) để allnum (k).Sau đó công thức 1 có thể được biểu thị dưới dạng:.def prob (p, w): Nếu in a (p, w) + num (all_but (p), w) < 5: trở về 0,5 p_prob = min (1, 2 * num (p, w) / allnum (p)) q_prob = min (1, num (all_but (p), w) / allnum (all_but (p))) trở về phút (0,99, tối đa (0.01, p_prob / (p_prob + q _ prob)))Biểu hiện 2Xác suất với thuộc tính p người dùng gửi Tweets có chứa từ w để prob (w, p), và loại 2 có thể được đại diện như:.def expr2 (W, p): p_prob = 1 cho w trong W: p_prob = p_prob * prob (w, p) n_prob = 1 cho w trong W: n_prob = n_prob * (1-prob (w, p)) trở lại p_prob / (n_prob + p _ prob)Định dạng của tập tin được sử dụng để khởi tạo cácBayesianClassifier nhận được một tập tin khởi tạo là một tập tin CSV ghi lại tất cả các tweets số thuộc về danh sách các thuộc tính, mỗi thuộc tính, và số lần xuất hiện của từ, và cho mỗi cấu hình. Tập tin được mã hóa theo UTF-8.Cụ thể, các nội dung của tập tin trông như thế này.Hồ sơ, M, F, 10, 20, 30, 40,50num_of_tweets, 172, 139,172, 93,129, 126, 87word1, 72, 31, 38, 82, 59,109, 22Trong trường hợp này, dòng 1 chi.
đang được dịch, vui lòng đợi..
Kết quả (Việt) 2:[Sao chép]
Sao chép!
Twitterプロファイラver2作成プロジェクト
基本情報
プロジェクト名
Twitterプロファイラver2作成
開発区分 / Division
SI開発(バッチ処理)
窓口担当
Itaru Suzuki
全体概要
現在,DSのいくつかのサービスでは,ユーザのbioおよびツイートからユーザの性別・年代を推定してその情報を利用しています. ここで言う年代とは,ユーザが10代,20代,...,50代のいずれであるかということです. 以降,ユーザの性別・年代情報を『プロファイル』,ユーザのプロファイルを推定するためのプログラムを『プロファイラ』と呼びます.

現在のプロファイラはユーザのプロファイルのうち,性別を80%正しく,年代を50%正しく判定することができます. これは十分に信頼できる値とはいえず,より精度を上げていきたいと考えています.

そこで,現在の手法とは別の手法を使ったプロファイラの作成をお願いしようと思います.

目的
RAWデータ(Twitterから供給される生のツイートデータ,Twitterの10%データ) を読み込み,ユーザのプロファイルを推定するプログラムを作成すること.

依頼作業範囲
このプロファイラは最終的に推定結果をデータベースに格納しますが, データベースへの接続部分はこちらで作成します. DSVにはそれ以外の部分全ての作成をお願いします.

### 納期 12月8日(月)を納期とします. ### 納品 Bitbucketにリポジトリを作成します. そこに成果をコミットしてください.
プロジェクト体制
DS側担当者
Itaru Suzuki
DSV側担当者
XXX
コミュニケーションプラン
毎週月曜日にDS側担当者まで進捗を報告してください. また,そのときにコードをコミットしてください.

システム概要
開発システム概要
今回作成したいのは,RAWデータを読み込み,そのbioと本文からプロファイルを推定し,結果をファイルに書き出すプログラムです.

その動作は次のようになります.

RAWデータを読み,そこからbioと本文を抽出します
ルールに基づいてプロファイルを推定します
プロファイルの推定に失敗した場合,ベイジアンフィルタによりプロファイルを推定します
結果をファイルに書き出します
開発範囲
RAWデータを読み,ツイートを表すオブジェクトを返すクラスRawDataParserはDS側で実装します.その他の部分についてはDSVでの開発をお願いします.

理由がない限り,RawDataParserを変更しないでください.

アーキテクチャ
### ハードウェア仕様 未定です.
ソフトウェア仕様
開発言語はJavaです.バージョン8に準拠してください.
機能外要件
性能要件
一度に1日分,144個のファイルを処理します
メモリ使用量は2GB以下であることを目標としてください
処理はどんなに長くとも1日で終了する必要があります
このような仕様になっている理由は,同じような条件で現在稼働している古いプロファイラを置き換えることを期待しているためです.

機能設計
全体の動作と対応するクラス
プログラム全体の処理は上述のように動作します.

これらの処理は,それぞれ次のクラスが受け持つものとします.

RawDataParser
RuleBaseClassifier
BayesianClassifier
ResultWriter
また,mainメソッドを持ち,コマンドラインから呼び出されるクラスは,ProfilerToplevelとしてください.

プロファイルについて
プロファイルは列挙型Profileで表現してください.その値はM10,M20,...,M50,F10,F20,...,F50,およびUNKNOWNです.

RuleBaseProfilerの動作
概要
ツイートのbioに特定の文字列が入っているかどうかでプロファイルを推定するプロファイラを表現したクラスです.



classifyメソッドは,ツイートを表すオブジェクトを受け取り,それをポストしたユーザのプロファイルをルールに基づいて推定して返します. この時nullを返すことは許されません.

このクラスはコンストラクタでFileオブジェクトを受け取り,その中に書かれた分類ルールを読み込む必要があります.

ルールファイルの書式
ルールファイルには,1行に1つのルールが記述されています. ルールはキーワード,性別,年代をタブで区切ったもので,bioにキーワードが含まれる時,そのbioを書いたユーザは対応するプロファイルであると推測されます. もし,性別,年代のどちらか一方だけを推測でき,他方はわからない場合,分からない方は*と表現されます.

その内容は例えば次のようになります.

男子高生 M 10
女子高生 F 10
高校生 * 10
男子 M *
女子 F *
これは次のようなルールを表現しています.

bioに「女子高生」が含まれている
「女性10代」
bioに「高校生」が含まれている
「性別不詳の10代」
bioに「男子」が含まれている
「男性で年代不詳」
bioに「女子」が含まれている
「女性で年代不詳」
次のような場合,初期化時に例外を発生させるべきです

ルールファイルに同じキーワードが出現していた場合
性別として解釈できない文字列が含まれていた場合
年代として解釈できない文字列が含まれていた場合
ルールファイルは空白文字とコメントについて次の仕様に従います.

キーワード,性,年代を表している各文字列の前後の空白文字は消去したあと解釈されるものとします
空白文字しか含まれない行(空行)はエラーとならず単に無視します
半角シャープ(#)から行末まではコメントです.空白として扱ってください
余分な空白やコメントを許容するのは,ルールを書きやすくするためです.

次のようなルールは無意味なものとして無視してください

キーワードが空白しか含まない場合
性別,年代が両方*であるような場合
また,次のようなフォーマットは特別扱いしてください.

正しいキーワード,性別,年代の後に続けてタブと文字列が続く場合,年代のあとのタブ以降の文字列は無視してください.これは,ルールに新たな項目を付け加える場合を考えてのことでする.
上記以外で形式に従わない場合はすべてエラーとして初期化時に例外を発生させるべきです

ルールの解釈
どのルールも当てはまらなかった場合,そのユーザのプロファイルはUNKNOWNです.

1つ以上のルールが当てはまり,それらが矛盾せず,また性別・年代が共にわかった場合,そのユーザのプロファイルはUNKNOWNでないどれかのプロファイルになります. たとえば,「女子高生」をbioに含む場合,そのユーザのプロファイルはF10(女性10代)です. あるいは,「女子」と「高校生」をbioに含む場合,そのユーザのプロファイルはF10(女性10代)です.

当てはまる全てのルールを使っても性別あるいは年代が不詳だった場合,そのユーザのプロファイルはUNKNOWNです. 例えば「高校生」だけが当てはまった場合は,性別不詳となるため,UNKNOWNとします.

もし矛盾する複数のルールがヒットした場合は,UNKNOWNと推測されるべきです. 例えば「男子高生」と「女子高生」が同時に含まれていた場合はUNKNOWNとなります.

テスト観点
正常系
次のようなルールファイルによってインスタンスが正常に初期化されることを確認してください.

空のファイル
正しいフォーマットのルールのみを含む
キーワード,性別,年代の前後にタブ以外の空白を含む
空行を含む
コメントを含む
追加のカラム(年代の後に続くタブと任意の文字列)がある行を含む
classifyメソッドが,次の場合に正しく動作することを確認してください.

ルールファイルにルールが1つもない場合.メソッドは常にUNKNOWNを返すはずです.
ルールが1つもあてはまらない場合
ルールが1つだけ当てはまり,それによってプロファイルが確定する場合
ルールが1つだけ当てはまり,性別か年代が不詳である場合
ルールが2つ以上当てはまり,それによってプロファイルが確定する場合
ルールが2つ以上当てはまり,性別か年代が不詳である場合
異常系
次の場合,例外を発生させるべきです.

初期化時,ルールファイルの書式が異常である場合
BayesianClassifierの動作
概要
ツイートのbioおよび本文に出現する名詞に関して,それらがあるプロファイルに特徴的な名詞であるかどうかを調べることでプロファイルを推測するプロファイラを表現したクラスです.



このクラスはコンストラクタでFileオブジェクトとしきい値を受け取り,Fileオブジェクトに書かれた各プロファイルごとの単語の出現数をロードする必要があります.

classifyメソッドは,ツイートを表すオブジェクトを受け取り,それをポストしたユーザのプロファイルをルールに基づいて推定して返します. この時nullを返すことは許されません.

判定手順
BayesianClassifierは,すべてのプロファイルについて,あるツイートがそのプロファイルに属する確率を計算し,それがもっとも高いプロファイルを返すことでツイートをポストしたユーザのプロファイルを推定します.

この判定手順は,A plan to spam(http://www.paulgraham.com/spam.html)を参考にしています. これと矛盾している,間違ったアルゴリズムを使っていると思われる場合は教えてください.

その手順は次のようになります.

ツイート1つについて,それが男性のものである確率,女性のものである確率,10代のものである確率,20代のものである確率,...,50代のものである確率を計算する
ユーザの性別について,確率の高い方を選ぶ.ただし,設定されたしきい値を下回った場合は不明扱いにする
ユーザの年代について,確率の高い方を選ぶ.ただし,設定されたしきい値を下回った場合は不明扱いにする
性別・年代が確定したら,対応したプロファイルを返す.どちらか一方でも不明であった場合はUNKNOWNを返す
あるツイートが,ある属性を持つユーザの(例えば男性の)ツイートである確率は,次のように計算します.

ツイートのbioと本文を形態素解析し,出現する名詞をリストアップする
ある単語wについて,それをポストしたユーザの 属性がpである確率を式1により求める. これをprob(p,w)とする.
|prob(p,w) - 0.5|が大きい順に,最大で15個の名詞を選ぶ. ただしこの値が0であるものは除く. 名詞の集合をWとする.
Wから,ツイートをポストしたユーザの属性がpである確率を,式2によって計算する.
プロファイルのうちもっとも確率の大きなものを返すただしこのとき,しきい値を超えない場合はUNKNOWとして返す.
プロファイルを判定する時,性別と年代を別々に判定するのではなく,M10である確率,M20である確率……というように判定する方法も考えられますが,そうしない理由は,それではデータ量が少なくなりすぎるからです.

男性でなければ女性であるという判定を行わない理由は,男性のものとも女性のものともわからない発言があると思われるからです.

式1
pでない属性をall_but(p)とする.

属性kを持つユーザによってポストされたツイートの中に単語wが出現した回数をnum(k,w),属性kを持つユーザによってポストされたツイートの総数をallnum(k)とする.

すると式1は次のように表現できる.

def prob(p,w) :
if num(p,w) + num(all_but(p),w) < 5 :
return 0.5
p_prob = min(1, 2 * num(p,w) / allnum(p))
q_prob = min(1, num(all_but(p),w) / allnum(all_but(p)))
return min(0.99, max(0.01, p_prob / ( p_prob + q_prob )))
式2
単語wを含むツイートをポストしたユーザが属性pを持つ確率をprob(w,p)とすると,式2は次のように表現できる.

def expr2(W, p) :
p_prob = 1
for w in W :
p_prob = p_prob * prob(w,p)
n_prob = 1
for w in W :
n_prob = n_prob * (1 - prob(w,p))
return p_prob / ( n_prob + p_prob )
初期化に使用されるファイルの書式
BayesianClassifierが初期化時に受け取るファイルは, 属性の一覧,各属性に属する総ツイート数, および単語と,プロファイルごとの出現数が記録されたCSVファイルです. ファイルはUTF-8でエンコードされているものとします.

具体的には,ファイルの内容は次のようになります.

profiles,M,F,10,20,30,40,50
num_of_tweets,172,139,172,93,129,126,87
word1,72,31,38,82,59,109,22
この場合,1行目が属
đang được dịch, vui lòng đợi..
 
Các ngôn ngữ khác
Hỗ trợ công cụ dịch thuật: Albania, Amharic, Anh, Armenia, Azerbaijan, Ba Lan, Ba Tư, Bantu, Basque, Belarus, Bengal, Bosnia, Bulgaria, Bồ Đào Nha, Catalan, Cebuano, Chichewa, Corsi, Creole (Haiti), Croatia, Do Thái, Estonia, Filipino, Frisia, Gael Scotland, Galicia, George, Gujarat, Hausa, Hawaii, Hindi, Hmong, Hungary, Hy Lạp, Hà Lan, Hà Lan (Nam Phi), Hàn, Iceland, Igbo, Ireland, Java, Kannada, Kazakh, Khmer, Kinyarwanda, Klingon, Kurd, Kyrgyz, Latinh, Latvia, Litva, Luxembourg, Lào, Macedonia, Malagasy, Malayalam, Malta, Maori, Marathi, Myanmar, Mã Lai, Mông Cổ, Na Uy, Nepal, Nga, Nhật, Odia (Oriya), Pashto, Pháp, Phát hiện ngôn ngữ, Phần Lan, Punjab, Quốc tế ngữ, Rumani, Samoa, Serbia, Sesotho, Shona, Sindhi, Sinhala, Slovak, Slovenia, Somali, Sunda, Swahili, Séc, Tajik, Tamil, Tatar, Telugu, Thái, Thổ Nhĩ Kỳ, Thụy Điển, Tiếng Indonesia, Tiếng Ý, Trung, Trung (Phồn thể), Turkmen, Tây Ban Nha, Ukraina, Urdu, Uyghur, Uzbek, Việt, Xứ Wales, Yiddish, Yoruba, Zulu, Đan Mạch, Đức, Ả Rập, dịch ngôn ngữ.

Copyright ©2024 I Love Translation. All reserved.

E-mail: