メむンコンテンツぞスキップ
芋出し画像

〚関心〛のスコア化方法22幎ラむフログ研究論文解説①【第4話】

    2004幎1月10日から22幎間、
    私は日蚘やチャットのログを蚘録し続けおきたした。
    総文字数は玄1550䞇文字。

    第3話では、「関心の倉化」の可芖化に関する研究を孊術論文ずしおたずめ、
    公開したこずを曞きたした
    。


    今回は、その裏偎。
    この膚倧なテキストデヌタを、どのように「関心スコア」に倉換しおいるのかを敎理したす。


    ■ なぜ「スコア化」が必芁なのか

    22幎分のログは、読み返せば゚ピ゜ヌドは芋぀かりたす。
    しかし、党䜓傟向は芋えたせん。

    「20代は友人の話が倚かった気がする」
     なんずなくだけど
    「30代は子どもの話題が増えた気がする」
     なんずなくだけど

    こうした感芚を
    可芖化・スコア化しデヌタ分析したした。

    22幎分の蚘憶を、たった1行のコヌドで怜玢し、偏差倀で可芖化する快感が埗られたす。


    画像
    図ラむフログから関心をスコア化する著者

    ■分析に䜿甚した生ログ

    私自身が1840歳20042025幎の22幎間に蚘録した個人ラむフログチャットログ日蚘等総量玄1550䞇文字を䜿甚したした。

    10䞇字小説換算で小説155冊分に盞圓したす。
    このラむフログは日付単䜍で敎理されおいたす。

     察象2004/1/102025/8/207863日分
     平均1,966字/日
     最倧77,308字/日
     欠損16.56%
     ※欠枬日のスコアに぀いおは前日間の加重移動平均により補正。

    なお、ログ量は日ごずに倧きなばら぀きがありたす。


    ■生ログの統合䜜業䞋凊理

    私のラむフログは玄4000ファむルに枡り、保存圢匏もバラバラでした。
    このため、生ログデヌタを、Python3系で21皮のコヌドを甚いお、
    箄3000䞇セル分35.5䞇行×80列の1ファむルに統合したした。
    非垞に倧倉
    さらに、「圢態玠解析Janome」により、生ログを単語ごずに区切りたしたこちらは難しいので詳现は省略。

    画像
    生ログ統合䞋凊理むメヌゞ
    画像
    保存しおいたログ䞀郚
    # 実際に䜿甚したコヌドの䞀郚を掲茉したす簡略化。
    # chat_log_parser.py
    import re # ★この行をファむルの先頭に远加したす★
    file_path = "20050112.txt"
    try:
        with open(file_path, 'r', encoding='cp932') as f:
            first_line = f.readline()
            log_date = first_line[8:18] # 䟋: '2005/01/12'
            print(f"抜出した日付: {log_date}\n")
            print("----- ここから各メッセヌゞの抜出結果 -----")
            all_chat_messages = []
            chat_line_pattern = re.compile(r'^(\d{2}:\d{2})\s+\((.*?)\)\s*(.*)$')
            for line in f:
                stripped_line = line.strip() # 行頭・行末の空癜や改行を削陀
                if not stripped_line: # 空癜行はスキップ
                    continue
                match = chat_line_pattern.match(stripped_line)
                if match:
                    time = match.group(1)      # グルヌプ1: 時刻
                    speaker = match.group(2)   # グルヌプ2: 話者
                    message = match.group(3)   # グルヌプ3: メッセヌゞ本文
                    all_chat_messages.append({
                        'Date': log_date,
                        'Time': time,
                        'Speaker': speaker,
                        'Message': message
                    })
                    print(f"日付: {log_date}, 時刻: {time}, 話者: {speaker}, メッセヌゞ: {message}")
                else:
                    print(f"譊告: パタヌンにマッチしない行をスキップしたした -> {stripped_line}")
            print(f"\nå…š{len(all_chat_messages)}件のメッセヌゞをリストに栌玍したした。")
    except FileNotFoundError:
        print(f"゚ラヌ: ファむル '{file_path}' が芋぀かりたせん。")
    except Exception as e:
        print(f"ファむルの読み蟌み䞭に゚ラヌが発生したした: {e}")

    ■関心スコア化

    関心項目に関するキヌワヌド蟞曞ずしお、
     ・分類語圙衚囜立囜語研究所2018
     ・日本語WordNet情報通信研究機構2010
     ・科孊技術甚語圢態玠解析蟞曞科孊技術振興機構2015

    による関心キヌワヌド蟞曞を䜜成したした。

    これを甚い、圢態玠解析枈のログの各項目キヌワヌドの日別出珟頻床を算出し、「関心スコア」ずしたした。
     語数28,593語。スコア71,219点

    # 実際に䜿甚したコヌドの䞀郚を掲茉したす簡略化。
    import pandas as pd
    import re
    main_data_path = "C:/Users/●●/chatlog_lifelog/Python/integrated_lifelog_data.csv"
    dictionary_path = "C:/Users/●●/99_detail_emotion_word.csv"
    try:
        df_integrated = pd.read_csv(main_data_path, encoding='utf-8-sig')
        df_dictionary = pd.read_csv(dictionary_path, encoding='utf-8-sig')
        print("統合デヌタず蟞曞ファむルを読み蟌みたした。")
        print(f"統合デヌタの行数: {len(df_integrated)}行")
        print(f"蟞曞デヌタの行数: {len(df_dictionary)}行")
        df_integrated['日付'] = pd.to_datetime(df_integrated['日付'], errors='coerce')
        df_dictionary['キヌワヌド'] = df_dictionary['キヌワヌド'].astype(str).fillna('')
    except FileNotFoundError as e:
        print(f"゚ラヌ: 必芁なファむルが芋぀かりたせん。パスを確認しおください: {e.filename}")
        exit()
    except Exception as e:
        print(f"デヌタの読み蟌み䞭に゚ラヌが発生したした: {e}")
        exit()
    print("\n--- ワヌド蟞曞をPythonの蟞曞圢匏に倉換したす ---")
    keyword_dict = df_dictionary.groupby('特定ゞャンル')['キヌワヌド'].apply(list).to_dict()
    text_columns = ['総合テキスト']
    print("\n--- 特定キヌワヌド特化スコアの䜜成を開始したす ---")
    for genre, keywords in keyword_dict.items():
        pattern = '|'.join(keywords)
            for text_col in text_columns:
            score_col_name = f"{text_col}_{genre}_スコア"
            text_series = df_integrated[text_col].fillna('')
            df_integrated[score_col_name] = text_series.str.count(pattern, flags=re.IGNORECASE)
            print(f"'{genre}'関連スコアの䜜成が完了したした。")
    print("\n--- 新しく䜜成されたスコア列の最初の5行䟋 ---")
    score_cols_to_show = [
        '日付', '総合テキスト_ごみ・廃棄物・䞀廃・産廃_スコア', '総合テキスト_むンフレ・倀䞊・物䟡高隰・物䟡䞊昇_スコア'
    ]
    existing_cols_to_show = [col for col in score_cols_to_show if col in df_integrated.columns]
    print(df_integrated[existing_cols_to_show].head())
    output_path_with_keywords = main_data_path.replace('.csv', '_with_detail_emotion_scores.csv')
    df_integrated.to_csv(output_path_with_keywords, index=False, encoding='utf-8-sig')
    print(f"\n新しく远加されたスコアを含むデヌタを '{output_path_with_keywords}' に保存したした。")
    print("このデヌタを今埌の分析にご利甚ください。")

    ■ 関心カテゎリの蚭蚈

    単語をそのたた集蚈しおも意味はありたせん。
    そこで、あらかじめ関心カテゎリ項目を蚭蚈したした。
    関心カテゎリ項目は、某垂の垂民アンケヌトず同じ項目にしたした。
    そうすれば、垂民アンケヌトずの比范が可胜になるため

    関心項目䟋
    子ども、家族 友人、知人 䜏宅、土地、お金・財産、
    健康、仕事、家事、勉匷、老埌、生掻、趣味嚯楜、
     、信仰宗教、政治、、地域掻動

    各単語をこれらのカテゎリに玐づけたす。


    ■ 暙準化ず偏差倀化

    ログの量は日によっおバラバラです。
    普通にやるず、たくさん曞いた日はスコアが高くなっお圓然。
    そこで「Constant-Sum Scaling」ずいう手法を甚い、
    その日の党単語に察する各カテゎリの構成比を算出したした。
    統蚈孊では「暙準化」ず呌ばれたす

    さらにこれを22幎間の自分ず比范しお「偏差倀」に倉換したす。
    これにより、「22幎間の自分史䞊、今日がどれだけ特別だったか」
    などのハむラむトが浮き圫りになりたす。

    䟋えば、私は2008幎8月21日の「友人」の関心の偏差倀は71でした。
    その日のログを芋返すず、
    どうやら、公務員詊隓に最終合栌した日で、友人ずその䌚話をしおいたした。
    ちなみに、この日の「家族」偏差倀は38

    「友人」の関心偏差倀71の日のログ抜粋圓時23歳
    
    --------2008/08/21 00:00:00 ログを開始
    2008/8/21 朚 19:51 私  ○○垂に受かったぞ!
    2008/8/21 朚 19:52 私  来幎から川厎に䜏みたす
    2008/8/21 朚 19:52 友人 おお
    2008/8/21 朚 19:52 友人 やったな
    2008/8/21 朚 19:52 友人 川厎っおどこだ
    2008/8/21 朚 19:52 友人 暪浜の蟺り
    2008/8/21 朚 19:52 私  暪浜ず東京の間。
    2008/8/21 朚 19:52 私  ギリギリ神奈川県
    2008/8/21 朚 19:52 友人 なるほど
    --------2008/08/22 00:00:00 ログを終了
    
    ※匿名加工枈
    画像
    図友人偏差倀71の日のログを発芋した瞬間


    ■ 限界に぀いお

    圓然ながら、この方法には限界がありたす。

    • 単語蟞曞蚭蚈の恣意性

    • 文脈の無芖

    • 皮肉や比喩の扱い

    • デヌタの欠損期間   など

     そのため、これは「厳密な心理枬定」ではなく、探玢的な可芖化手法ず䜍眮づけおいたす。


    ■生ログ逆参照トレヌサビリティの可胜性

    スコア劥圓性怜蚌ずしお、関心偏差倀が高い特定期間の生ログを逆参照し、日時ID、生ログID、感情スコアID、各関心スコアIDをキヌに、察象日前埌7日の生ログを確認したした。

    第1話でも觊れたしたが、䟋えば、2009幎8月4日の週は「友人」偏差倀91の異垞倀であり、22幎間で偏差倀80以䞊の週は11回のみでした。

    これは統蚈孊䞊は単なる異垞倀倖れ倀ですが、
    ラむフログにおいおは、決しお単なる数倀ではなく、
    「忘れおいた芪友ずの熱い䌚話を、20幎越しに発掘しおくれた瞬間」
    です。

    画像
    「友人」偏差倀の22幎分スコア週平均


    偏差倀の高い日は、いずれも非垞に濃い䌚話䌚話䟋「鳥肌立぀展開」などが繰り広げられおたした。
    ぀たり、生ログ逆参照トレヌサビリティ手法を掻甚するこずで、文脈芁因远跡の手がかりを埗るこずが可胜です。

    なお、高関心高感情ポゞティブ発蚀を抜出すれば「負の異垞倀」を回避するこずも可胜です。

    埓来の統蚈分析マクロ分析では、異垞倀は「倖れ倀」ずしお陀去され、たた、生ログの逆参照も䞍可胜でした。

    ですが、個人ログN=1においおは、異垞倀は関心が跳ねる瞬間であり、行動倉容やパヌ゜ナラむズの起点ずしお䟡倀が高く、こうした異垞倀こそ探玢の起点や芁因理解ずなり埗るこずが瀺唆されたした。


    ■ 未来ぞの展望

    これはただ仮説段階ですが、
    RAGRetrieval-Augmented GenerationやAI゚ヌゞェントの進展は、ラむフログを個人の怜玢可胜な資源ずしお扱う流れGurrin et al.2014ずも芪和性が高く、本皿で瀺したN=1研究の再珟性ず蓄積可胜性を高める基盀技術ずしお期埅されたす。

    たた、本研究で詊みた日別生ログの逆参照によるトレヌサビリティを発展させるこずで、N=1デヌタの長期保存ず高粟床な文脈抜出を組み合わせた介入蚭蚈の枠組みが構想し埗るず考えおいたす。

    䟋えば今埌、「ログは財産」ずいう考え方の䞋で、N=1ログ䞭の「関心の源泉」をキヌワヌド分析にずどたらずRAG等で文脈的に掘り起こし、個人の内発的動機付けを促す介入も考えられたす。

    こうしたAIによる介入モデルず本皿のモデルを組み合わせ、人々の関心の維持・拡匵に察する効果を実蚌的に怜蚎するこずは、瀟䌚情報孊における今埌の重芁な課題の䞀぀ずなり埗るず考えおいたす。

    画像
    AIずRAGが進化した将来、あらゆる「ログは財産」になり埗る


    ■次回【第5話】

    次回は、「関心」ずは別の、もう䞀぀の軞である「感情スコア」の算出方法です。
    関心ず感情は、䌌おいるようで、
    実はたったく異なる動きをしたす。

    ▌第話「感情」のスコア化方法


    ▌本シリヌズの起点【第1話】

     https://note.com/lifelog_lab/n/n2f55c09c19bb


    もしよろしければ「フォロヌ」ず「スキ」をいただけるず、
    ずおも励みになりたす。


    ▌日本ラむフログ研究所 │ 公匏サむト

    ・公匏サむトURL
     https://wide-spirit-498.notion.site/346b4484a04880e8b4b7dbd94f9e602a


    あなたぞのおすすめ