IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 川上 成年の特許一覧

特開2024-137730分類処理プログラム、システム及び方法
<>
  • 特開-分類処理プログラム、システム及び方法 図1
  • 特開-分類処理プログラム、システム及び方法 図2
  • 特開-分類処理プログラム、システム及び方法 図3
  • 特開-分類処理プログラム、システム及び方法 図4
  • 特開-分類処理プログラム、システム及び方法 図5
  • 特開-分類処理プログラム、システム及び方法 図6
  • 特開-分類処理プログラム、システム及び方法 図7
  • 特開-分類処理プログラム、システム及び方法 図8
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024137730
(43)【公開日】2024-10-07
(54)【発明の名称】分類処理プログラム、システム及び方法
(51)【国際特許分類】
   G06F 16/35 20190101AFI20240927BHJP
【FI】
G06F16/35
【審査請求】未請求
【請求項の数】6
【出願形態】OL
(21)【出願番号】P 2024018586
(22)【出願日】2024-02-09
(31)【優先権主張番号】P 2023044838
(32)【優先日】2023-03-21
(33)【優先権主張国・地域又は機関】JP
(31)【優先権主張番号】P 2023108887
(32)【優先日】2023-06-30
(33)【優先権主張国・地域又は機関】JP
(31)【優先権主張番号】P 2023175616
(32)【優先日】2023-10-11
(33)【優先権主張国・地域又は機関】JP
【新規性喪失の例外の表示】特許法第30条第2項適用申請有り 令和5年7月2日のMPUF R&Dイノベーション研究会年次総会にて発表 [刊行物等] 令和5年9月13日に、公益社団法人日本マーケティング協会のウェブサイトにて公開 [刊行物等]令和5年11月18日の日本知財学会第21回年次学術研究発表会にて発表 [刊行物等] 令和5年10月25日に、公益社団法人日本マーケティング協会のウェブサイトにて公開
(71)【出願人】
【識別番号】510255004
【氏名又は名称】川上 成年
(72)【発明者】
【氏名】川上 成年
【テーマコード(参考)】
5B175
【Fターム(参考)】
5B175DA01
5B175FA03
(57)【要約】      (修正有)
【課題】自然言語による分類処理をするプログラム、システム及び方法を提供する。
【解決手段】分類処理プログラムの処理方法は、生成AIサーバーに接続したコンピュータから、複数の自然言語による分類を生成する指示を含む分類生成指示情報を生成AIサーバーへ送信する処理、生成AIサーバーが、分類生成指示情報に基づいて生成した複数の自然言語による分類を含む分類生成結果情報を受信する処理、複数の自然言語からなる文字列情報と、分類生成結果情報に含まれた複数の自然言語による分類を含む分類処理指示情報とを生成AIサーバーへ送信する処理、分類処理指示情報に基づいて複数の自然言語からなる文字列情報の各々を複数の自然言語による分類に分類した分類処理結果情報を、生成AIサーバーから受信する処理及び分類処理結果情報に基づいて複数の自然言語からなる文字列情報を、複数の自然言語による分類毎に集計する処理を実行させる。
【選択図】図3
【特許請求の範囲】
【請求項1】
大規模言語モデルによる自然言語処理を提供する生成AIサーバーにネットワークを介して接続したコンピュータに、
複数の自然言語による分類を生成する指示を含む分類生成指示情報を前記生成AIサーバーへ送信する処理と、
前記生成AIサーバーが、前記分類生成指示情報に基づいて生成した、複数の自然言語による分類を含む分類生成結果情報を、前記生成AIサーバーから受信する処理と、
複数の自然言語からなる文字列情報と、前記分類生成結果情報に含まれた前記複数の自然言語による分類を含む分類処理指示情報と、を前記生成AIサーバーへ送信する処理と、
前記生成AIサーバーが、前記分類処理指示情報に基づいて、前記複数の自然言語からなる文字列情報の各々を、前記複数の自然言語による分類に分類した分類処理結果情報を、前記生成AIサーバーから受信する処理と、
前記分類処理結果情報に基づいて、前記複数の自然言語からなる文字列情報を、前記複数の自然言語による分類ごとに集計する処理と、
を実行させる分類処理プログラム。
【請求項2】
前記分類生成指示情報は、
前記複数の自然言語からなる文字列情報と、前記複数の自然言語からなる文字列情報に基づいて複数の自然言語による分類を生成する指示と、を含み、
前記分類生成結果情報は、
前記生成AIサーバーが、前記分類生成指示情報に基づいて、前記複数の自然言語からなる文字列情報から生成した複数の自然言語による分類を含む、請求項1に記載の分類処理プログラム。
【請求項3】
大規模言語モデルによる自然言語処理を提供する生成AIサーバーにネットワークを介して接続したコンピュータに、
複数の自然言語からなる文字列情報と、前記複数の自然言語からなる文字列情報に基づいて複数の自然言語による第1カテゴリ分類と複数の自然言語による第2カテゴリ分類とを生成する指示を含む分類生成指示情報を前記生成AIサーバーへ送信する処理と、
前記生成AIサーバーが、前記分類生成指示情報に基づいて生成した、複数の自然言語による第1カテゴリ分類と複数の自然言語による第2カテゴリ分類とを含む分類生成結果情報を、前記生成AIサーバーから受信する処理と、
前記複数の自然言語からなる文字列情報と、前記分類生成結果情報に含まれた複数の自然言語による第1カテゴリ分類と前記複数の自然言語による第2カテゴリ分類とを含む分類処理指示情報と、を前記生成AIサーバーへ送信する処理と、
前記生成AIサーバーが、前記分類処理指示情報に基づいて、前記複数の自然言語からなる文字列情報の各々を、前記複数の自然言語による第1カテゴリ分類に分類するとともに、前記複数の自然言語による第2カテゴリ分類に分類した分類処理結果情報を、前記生成AIサーバーから受信する処理と、
前記分類処理結果情報に基づいて、前記複数の自然言語からなる文字列情報を、前記複数の自然言語による第1カテゴリ分類及び前記複数の自然言語による第2カテゴリ分類ごと、にクロス集計する処理と、
を実行させる分類処理プログラム。
【請求項4】
前記集計処理の結果を視覚化する処理をさらに実行させる請求項1または3に記載の分類処理プログラム。
【請求項5】
大規模言語モデルによる自然言語処理を提供する生成AIサーバーと、端末とが、ネットワークを介して接続した分類処理システムであって、
前記端末が、複数の自然言語による分類を生成する指示を含む分類生成指示情報を前記生成AIサーバーへ送信し、
前記生成AIサーバーが、前記分類生成指示情報に基づいて生成した、複数の自然言語による分類を含む分類生成結果情報を、前記端末へ送信し、
前記端末が、複数の自然言語からなる文字列情報と、前記分類生成結果情報に含まれた前記複数の自然言語による分類を含む分類処理指示情報と、を前記生成AIサーバーへ送信し、
前記生成AIサーバーが、前記分類処理指示情報に基づいて、前記複数の自然言語からなる文字列情報の各々を、前記複数の自然言語による分類に分類した分類処理結果情報を、前記端末へ送信する、分類処理システム。
【請求項6】
大規模言語モデルによる自然言語処理を提供する生成AIサーバーと、端末とが、ネットワークを介して接続したシステムで実行される分類処理方法であって、
前記端末が、複数の自然言語による分類を生成する指示を含む分類生成指示情報を前記生成AIサーバーへ送信し、
前記生成AIサーバーが、前記分類生成指示情報に基づいて生成した、複数の自然言語による分類を含む分類生成結果情報を、前記端末へ送信し、
前記端末が、複数の自然言語からなる文字列情報と、前記分類生成結果情報に含まれた前記複数の自然言語による分類を含む分類処理指示情報と、を前記生成AIサーバーへ送信し、
前記生成AIサーバーが、前記分類処理指示情報に基づいて、前記複数の自然言語からなる文字列情報の各々を、前記複数の自然言語による分類に分類した分類処理結果情報を、前記端末へ送信する、分類処理方法。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、分類処理プログラム、システム及び方法に関する。
【背景技術】
【0002】
特許文献1には、特許マップ生成プログラムが開示されている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特許第6586614号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
特許文献1では、文字列の分類処理にテキストマイニング処理が使用されている。しかしながら、自然言語による分類処理は難易度が高い場合があるという課題がある。
【0005】
本発明は、このような従来の問題を解決するためになされたもので、自然言語による分類処理をすることを目的とする。
【課題を解決するための手段】
【0006】
本発明は、大規模言語モデルによる自然言語処理を提供する生成AIサーバーにネットワークを介して接続したコンピュータに、複数の自然言語による分類を生成する指示を含む分類生成指示情報を生成AIサーバーへ送信する処理と、生成AIサーバーが、分類生成指示情報に基づいて生成した、複数の自然言語による分類を含む分類生成結果情報を、生成AIサーバーから受信する処理と、複数の自然言語からなる文字列情報と、分類生成結果情報に含まれた複数の自然言語による分類を含む分類処理指示情報と、を生成AIサーバーへ送信する処理と、生成AIサーバーが、分類処理指示情報に基づいて、複数の自然言語からなる文字列情報の各々を、複数の自然言語による分類に分類した分類処理結果情報を、生成AIサーバーから受信する処理と、分類処理結果情報に基づいて、複数の自然言語からなる文字列情報を、複数の自然言語による分類ごとに集計する処理と、を実行させる分類処理プログラムである。
本発明は、大規模言語モデルによる自然言語処理を提供する生成AIサーバーと、端末とが、ネットワークを介して接続した分類処理システムであって、端末が、複数の自然言語による分類を生成する指示を含む分類生成指示情報を生成AIサーバーへ送信し、生成AIサーバーが、分類生成指示情報に基づいて生成した、複数の自然言語による分類を含む分類生成結果情報を、端末へ送信し、端末が、複数の自然言語からなる文字列情報と、分類生成結果情報に含まれた複数の自然言語による分類を含む分類処理指示情報と、を生成AIサーバーへ送信し、生成AIサーバーが、分類処理指示情報に基づいて、複数の自然言語からなる文字列情報の各々を、複数の自然言語による分類に分類した分類処理結果情報を、端末へ送信する分類処理システムである。
本発明は、大規模言語モデルによる自然言語処理を提供する生成AIサーバーと、端末とが、ネットワークを介して接続したシステムで実行される分類処理方法であって、端末が、複数の自然言語による分類を生成する指示を含む分類生成指示情報を生成AIサーバーへ送信し、生成AIサーバーが、分類生成指示情報に基づいて生成した、複数の自然言語による分類を含む分類生成結果情報を、端末へ送信し、端末が、複数の自然言語からなる文字列情報と、分類生成結果情報に含まれた複数の自然言語による分類を含む分類処理指示情報と、を生成AIサーバーへ送信し、生成AIサーバーが、分類処理指示情報に基づいて、複数の自然言語からなる文字列情報の各々を、複数の自然言語による分類に分類した分類処理結果情報を、端末へ送信する分類処理方法である。
【発明の効果】
【0007】
本発明の分類処理プログラム、システム及び方法によれば、自然言語による分類処理をすることができる。
【図面の簡単な説明】
【0008】
図1】分類処理プログラムを実行するシステムの概略図
図2】分類処理プログラムを実行する装置のブロック図
図3】分類処理プログラムの処理のフローチャート
図4】データフレーム
図5】視覚化された特許データ
図6】データフレーム
図7】データフレーム
図8】視覚化されたレビューデータ
【発明を実施するための形態】
【0009】
以下、実施形態である分類処理プログラム、システム及び方法について、図を参照して詳細に説明をする。
【0010】
図1は、分類処理プログラムを実行するシステムの概略図である。分類処理プログラムを実行するための情報処理装置(端末1)は、ネットワークを介して生成AIサーバー2(自然言語処理APIサーバー)と接続する。
【0011】
生成AIサーバー2は、入力された自然言語からなる文字列の処理(実施形態では、要約や分類生成や分類)を実行するコンピュータである。実施形態の生成AIサーバー2は、例えばOpenAI社のChatGPT(以上、会話型サービス)、GPT-4 Turbo、GPT-4、GPT-3.5 Turbo、GPT-3.5、GPT-3(以上、APIサービス)という大規模言語モデルを組み込んだクラウドベースのサービスを提供する生成AIサーバーである。なお、生成AIサーバー2はこれに限られず、同様の機能を提供する大規模言語モデルを組み込んだ自然言語処理を実行する生成AIサーバー(例えば、Google社が開発したBard(以上、会話型サービス)やGemini(以上、APIサービス)など)であればよい。
【0012】
実施形態の生成AIサーバー2は、CPU、メモリ、入出力装置、外部インターフェースを有し、外部装置からの入力に対し、大規模言語モデルを組み込んだ自然言語処理(実施形態では要約処理、分類生成処理、及び、分類処理)を実行し出力するものである。
【0013】
図2は、実施形態の分類処理プログラムを実行するための情報処理装置(端末1)のブロック図である。
【0014】
システムバス108を介して、CPU(Central Processing Unit)101、ROM(Read Only Memory)102、RAM(Random Access Memory)103、HDD(Hard Disk Drive)105、外部I/F(Interface)106、及び、入力部107が接続される。CPU101とROM102とRAM103とで制御部104を構成する。
【0015】
ROM102は、CPU101により実行されるプログラムや閾値を予め記憶する。RAM103は、CPU101が実行するプログラムを展開するエリアと、プログラムによるデータ処理の作業領域となるワークエリアなどの様々なメモリエリア等を有する。
【0016】
HDD105は、入力部107から入力された特許データ(アンケートデータや自然言語文データ)等を記憶する。外部I/F106は、例えば、外部サーバー(PC)などの外部装置と通信するためのインターフェースである。なお、HDDではなく、SSD(Solid State Drive:ソリッド・ステート・ドライブ)であってもよい。
【0017】
外部I/F106は、外部装置とデータ通信を行うインターフェースであれば良く、たとえば、外部装置にローカルに接続する機器(USBメモリ等)であってもよいし、有線又は無線ネットワークを介して通信するためのネットワークインターフェースであってもよい。
【0018】
外部I/F106は、液晶ディスプレイ等の表示装置(不図示)と接続する。入力部107は、キーボード、マウス、スキャナ(読取装置)等の入力装置である。
【0019】
制御部104は、外部I/F106を介して、外部装置(生成AIサーバー2など)とデータをやり取りすることにより、プログラムの実行に必要なpythonライブラリを取得したり、自然言語による文字列データの送信や、分類生成結果や分類処理結果の受信を行ったりする。なお、pythonは登録商標である。
【0020】
(実施形態1:特許データ分析)
次に、実施形態の分類処理プログラム、システム及び方法の処理手順を説明する。下記コードブロック1から19を連続して繋げた一連のものが、実施形態のプログラム及び方法であり、基本的には連続して記載すべきものである。ただし、説明しやすさを考慮して、コードブロック1から19に分割して説明する。
【0021】
図3は、実施形態の分類処理プログラムの処理のフローチャートである。STEP1で、要約(自然言語による文字列情報)から課題(自然言語による第1カテゴリ分類)文字列と解決手段(自然言語による第2カテゴリ分類)文字列を抽出し、STEP2で、課題文字列を要約し、STEP3で、課題要約から課題分類を生成し、STEP4で、課題要約を分類し、STEP5で、解決手段文字列を要約し、STEP6で、解決手段要約から解決手段分類を生成し、STEP7で、解決手段要約を分類し、STEP8で、分類した課題と解決手段でクロス集計を行い、STEP9で、集計結果を視覚化する。
【0022】
なお、実施形態では、処理対象の自然言語からなる文字列として特許データの要約を用いているが、文字列の対象はこれに限られず、明細書本文や請求項内の文字列であってもよい。また、特許データ以外のアンケートやユーザーレビューや論文等の自然言語からなる文字列を処理対象としてもよい。
【0023】
(STEP1:課題と解決手段の文字列抽出ステップ)
まず、制御部104は、複数の特許データの要約書からの課題の文字列と解決手段の文字列を抽出する。プログラムは以下の通りである。なお、下記プログラムは端末1の制御部に格納されたPythonによるプログラムである。ただし、他のプログラミングツールやプログラミング言語(VBAやGAS等)を使用することでもよい。また、下記プログラムはあくまでも一例であり、処理順序や使用するライブラリや関数や変数名は変更してよい。
【0024】
(コードブロック1)
import pandas as pd
# データ読み込み
# googleドライブの利用
from google.colab import drive
drive.mount('/content/drive')
# データの読み込み(google ドライブから)
df = pd.read_excel('/content/drive/MyDrive/patdata.xlsx')
# 課題と解決手段の分離
# 課題と解決手段の間、解決手段と選択図の間の文字列を抽出して、新しい列(problem,solution)として追加する
df['problem'] = df['summary'].str.extract('[課題](.+?)[解決手段]', expand=False)
df['solution'] = df['summary'].str.extract('[解決手段](.+?)[選択図]', expand=False)
【0025】
このプログラムの説明をすると、以下のようになる。まず、制御部104は、pandasというモジュールをインポートする。pandasはPythonでデータ分析を行うためのツールである。次に、google.colabというモジュールからdriveという関数をインポートする。driveはGoogleドライブにアクセスするための関数である。なお、Googleは登録商標である。
【0026】
制御部104は、drive関数を実行して、Googleドライブを'/content/drive'というパスにマウントする。マウントとは、GoogleドライブのファイルやフォルダをGoogle Colab上で操作できるようにすることである。
【0027】
制御部104は、pd.read_excel関数を使って、'/content/drive/MyDrive/patdata.xlsx'というパスにあるpatdata.xlsxというExcelファイルを読み込む(なお、ファイル形式はExcelに限られず、他の関数を使用すればCSV形式も可能である)。このExcelファイルには複数件の要約書データ(自然言語による文字列データ)を格納した特許データが格納されている。特許データをデータフレーム化したものの一部を図4に示す。データフレームのsummary列には特許の要約書の内容が格納されている。なお、図4ではスペースの関係上20件のみの例示となっているが、実施形態では50件(50行)のデータフレームを使用している。もちろんこれ以上の件数もこれ以下の件数も可能である。また、図4では、スペースの関係上、summary列には要約書の全文が表示されていないが、実際には要約書全文がExcelの1つのセルに格納されている。なお、Excelは登録商標である。また、データフレームはSTEP1の時点では、summary列のみである。以下のステップの処理によりsummary列以外の他の列がデータフレームに追加されることになる。
【0028】
制御部104は、読み込んだファイルをdfという変数に代入する。dfはデータフレームと呼ばれる表形式のデータ構造である。df['summary']とすることで、dfの中からsummaryという列だけを取り出す。summary列には自然言語からなる特許の要約書の内容が格納されている。
【0029】
制御部104は、str.extract関数を使って、summary列から「課題」から「解決手段」までの部分の文字列を抽出する。この部分の文字列は特許の課題を表す(課題文字列情報とする)。抽出した部分文字列をproblemという新しい列に追加する。df['problem'] = ...とすることで、dfに新しい列problemが作成される(図4のproblem列)。
【0030】
同様に制御部104は、str.extract関数を使って、summary列から「解決手段」から「選択図」までの部分の文字列を抽出する。この部分の文字列は特許の解決手段を表す(解決手段文字列情報とする)。抽出した部分の文字列をsolutionという新しい列に追加する。df['solution'] = ...とすることで、dfに新しい列solutionが作成される(図4のsolution列)。
【0031】
なお、この要約からの「課題」及び「解決手段」の文字列の抽出工程は必須のものではない。つまり、要約全体をそのまま文字列情報として生成AIサーバーへ送信し、課題と解決手段(第1カテゴリ及び第2カテゴリ)の分類処理することでもよい。ただし、「課題」、「解決手段」の文字列を個別に抽出して処理することにより、生成AIサーバー2による分類精度の向上を図ることができるので、「課題」及び「解決手段」の文字列の抽出工程を設けることが好ましい。
【0032】
(STEP2:課題要約ステップ)
次に、制御部104は、課題文字列情報(第1カテゴリ文字列情報)と課題要約指示情報(第1カテゴリ文字列要約指示情報)とを生成AIサーバー2へ送信し、生成AIサーバー2から課題要約情報を受信する。プログラムは以下の通りである。
【0033】
(コードブロック2)
! pip install openai
import openai
import re
# テキストの前処理関数(必要に応じて)
def clean_text(text):
text = re.sub(r'\s+', ' ', text) # スペースの重複を削除
text = re.sub(r'[^\w\s]', '', text) # 句読点などの特殊文字を削除
return text
【0034】
このコマンドは、OpenAIのPythonライブラリをインストールするためのものである。!は、コマンドをシェルコマンドとして解釈することを示す。pipは、Pythonのパッケージマネージャーで、installはライブラリをインストールするために使用されるコマンドである。
【0035】
制御部104は、openaiとreというPythonライブラリをインポートする。openaiライブラリは、OpenAIのAPIを使用して様々な自然言語処理タスクを実行するためのものであり、reライブラリは正規表現を使用するためのものである。なお、openaiライブラリの使用には、実際にはAPIキーの入力が必要であるが、公開には支障があるため、プログラムの記載からは割愛している。
【0036】
(コードブロック3)
def clean_text(text):
text = re.sub(r'\s+', ' ', text)
text = re.sub(r'[^\w\s]', '', text)
return text
【0037】
このプログラムは、引数として受け取った文字列(text)から、特殊文字や余分な空白を取り除いた文字列を返す関数である。具体的には、Pythonの標準ライブラリであるre(正規表現操作)を使って、文字列の操作を行っている。
【0038】
re.sub(r'\s+', ' ', text)は、連続する空白文字を一つの空白文字に置き換える。\sは、空白文字を表し、+はそれが一回以上続くことを示す。つまり、複数回の空白文字を一つに置き換えている。
【0039】
次に、re.sub(r'[^\w\s]', '', text)は、英数字と空白文字以外の文字を削除する。[^\w\s]は、英数字と空白文字以外の文字を表し、^は否定を表す。つまり、これは英数字と空白文字以外の文字を取り除くことを意味する。
【0040】
最後に、クリーン化された文字列を返す。return textは、関数の出力として、クリーン化された文字列を返すことを示す。なお、このコードブロック3は必須ではない。
【0041】
次に、制御部104は、課題文字列情報と課題要約指示情報とを生成AIサーバー2へ送信し、生成AIサーバー2から課題要約情報(第1カテゴリ文字列要約結果情報)を受信する。プログラムは以下の通りである。
【0042】
(コードブロック4)
# 課題の要約を生成する関数
def generate_p_summary(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "この文章が示す課題を10文字以内に要約してください。"},
{"role": "user", "content": text}],
temperature=0.10,
max_tokens=10,
#top_p=1.0,
frequency_penalty=0,
presence_penalty=0,
)
p_summary = response["choices"][0]["message"]["content"]
return p_summary
【0043】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章を要約する機能を提供する。なお、言語モデルは「GPT-4」に限られず、「GPT-4 Turbo」や「GPT-3.5 Turbo」であってもよいし、次バージョンのGPTシリーズであってもよい。これらは、自然言語処理タスクにおいて高い精度を発揮することが知られている。
【0044】
generate_p_summary(text)関数は、1つのテキスト(text)を引数として受け取り、制御部104は、そのテキストを要約するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側から「この文章が示す課題を10文字以内に要約してください。」という指示情報(プロンプト)を送信する。この指示情報を課題要約指示情報とする。なお、要約する文字数は10文字に限られず、これより多くとも少なくともよい。生成AIサーバーによる処理のtoken数の上限に応じて文字数を調整するのがよい。
【0045】
生成AIサーバー2は、与えられたテキスト(課題文字列情報)を課題要約指示情報に基づいて要約して課題要約情報として返信する。生成AIサーバー2からのレスポンスには、要約されたテキスト(課題要約情報)が含まれている。課題要約情報はp_summary変数に格納され、関数の出力として返される。
【0046】
(コードブロック5)
# 課題の要約を新しい列に追加
df['p_summary'] = df['problem'].apply(lambda x: generate_p_summary(clean_text(x)))
【0047】
この部分のプログラムは、Pandasのデータフレームdfの'problem'列に格納されている各行の文章を、clean_text関数でクリーンアップした後、generate_p_summary関数を用いて要約した結果(課題要約情報)をdfの新しい列'p_summary'に追加するためのものである(図4のp_summary列)。
【0048】
clean_text関数は、入力テキストから不要な空白や特殊文字を除去し、GPT-4モデルが解釈しやすい形式にテキストを整形する。その後、generate_p_summary関数は整形されたテキストを受け取り、GPT-4モデルを使ってテキストを要約する。要約された結果はデータフレームdfの新しい列'p_summary'に格納される(図4のp_summary列)。なお、clean_text関数による処理は必須のものではない。
【0049】
なお、実施形態では、生成AIサーバーによる処理のtoken数の上限の関係上、STEP2と5で課題と解決手段の要約を生成するステップを設けているが、token数の上限がない(もしくは、上限値が大きい)場合には、STEP2と5を省略してもよい。すなわち、課題と解決手段の全文(もしくは、要約書の全文)を生成AIサーバー2へ送信し、以降の分類生成処理や分類処理を行うことでもよい。ただし、処理速度や生成AIの使用コストの観点からは、要約処理を行うことが好ましい。
【0050】
(STEP3:課題分類生成ステップ)
次に、制御部は、複数の課題要約情報(第1カテゴリ文字列要約結果情報)と課題分類生成指示情報(第1カテゴリ文字列分類生成指示情報)を生成AIサーバー2へ送信し、生成AIサーバー2から課題分類情報を受信する。プログラムは以下の通りである。
【0051】
(コードブロック6)
# DataFrameの'p_summary'列からデータを取り出し、p_summariesという変数に格納する
p_summaries = df['p_summary'].values
# すべての要約を1つの文字列に結合
p_summaries_text = ', '.join(p_summaries)
【0052】
この部分のプログラムは、Pandasのデータフレームdfから'p_summary'列の全ての値を取得し、それらをp_summariesという変数に格納する。具体的には、df['p_summary'].valuesがdfデータフレームの'p_summary'列の全ての値を取得する。
【0053】
次に、'p_summaries'変数の各要素(各課題の要約)をカンマとスペース(', ')で連結し、それを一つの大きな課題要約の文字列(p_summaries_text)に変換する。この操作により、課題要約のリストが一つの文字列に結合され、その後の処理で使用できるようになる。すなわち、上記要約された10文字以内の文字列を統合して1つの文字列とする処理である。例えば、要約数が50の場合には、ここでの課題要約の文字列(p_summaries_text)は、「騒音低減, 意図外騒音抑制, モータ温度管理, 排気口閉塞抑制, 絡み付き抑制, ごみ捨て改善, 充電の安定性, 塵埃除去効率, 吸引力向上, 巻き付き抑制, 吸引効率向上, ゴミ捨て頻度, 操作説明改善, 電池劣化抑制, コミュニケーション, 床タイプ適応性, 清掃・収納性向上, 巻き付き解消, 床面判定改善, 脚周り掃除改善, 軽量化・応力緩和, 構造簡素化, 収納性・小型化, 電源端子保護, 支持機能改善, 始動性能向上, ゴミ捨て簡便化, 分離効率向上, 塵埃回収改善, 集塵効果向上, 接続性改善, 圧力降下軽減, フィルタ目詰まり抑制, 繊維絡み防止, 簡単ゴミ捨て, 温度上昇抑制, 使用形態切替, 清掃性能向上, フィルタ掃除軽減, 塵埃効率帯電, 自立安定性改善, マップ効率向上, 効率性・簡易性, 小型化の追求, 距離安定性向上, サイドブラシ停止, サイドブラシ制御, 分離部洗浄確認, 気密性・騒音改善, 衝撃軽減改善」のような文字列となる。
【0054】
(コードブロック7)
# 課題分類を生成する関数
def generate_p_classification(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "これらの課題の用語を10個に分類し、分類名のみを出力してください。"},
{"role": "user", "content": text}],
temperature=0.10,
max_tokens=10,
frequency_penalty=0,
presence_penalty=0,
)
p_classification = response["choices"][0]["message"]["content"]
return p_classification
【0055】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章から分類を生成する機能を提供する。
【0056】
generate_p_classification(text)関数は、1つのテキスト(text)を引数として受け取り、制御部104は、そのテキスト(課題要約文字列)から分類を生成するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側から「これらの課題の用語を10個に分類し、分類名を出力してください。」という指示情報(プロンプト)を送信する。この指示情報を課題分類生成指示情報(第1カテゴリ分類生成指示情報)とする。なお、課題の分類数は10個に限られず、それ以上でも以下でもよい。また、プロンプトの内容はこれに限られず、より詳細な指示としてもよい。
【0057】
生成AIサーバー2は、与えられたテキスト(課題要約文字列)を課題分類生成指示情報に基づいて分類を生成して返信する。生成AIサーバー2からのレスポンスには、課題分類のテキスト(課題分類情報)が含まれている。課題分類情報はp_classification変数に格納され、関数の出力として返される。
【0058】
(コードブロック8)
# 課題分類を生成
p_classification = generate_p_classification(p_summaries_text)
【0059】
このプログラムは、上記生成したp_summaries_text(全ての課題の要約を一つの文字列に結合したもの)を引数として、generate_p_classification関数を呼び出す。
【0060】
generate_p_classification関数は、OpenAIのGPT-4モデルを使ってテキスト(この場合は課題の要約)の分類を生成する役割がある。具体的には、関数は「これらの課題の用語を10個に分類し、分類名のみを出力してください」という指示(プロンプト)をGPT-4に与え、それに基づいてGPT-4は10個のカテゴリーを生成する。
【0061】
このコードが実行されると、結果的に課題の要約(p_summaries_text)が10個のカテゴリに分類され、その結果(分類名)がp_classification変数に格納される。すなわち、p_classification変数には、「騒音と振動管理、熱管理、パワーと効率性、絡み防止と解消、ユーザーインターフェイスと操作性、電源と電池管理、設計と構造、収納と清掃、堅牢性と耐久性、接続と通信」のように、10個の課題分類が1つの文字列となり、格納されている。
【0062】
(STEP4:課題分類処理ステップ)
次に、制御部は、複数の課題要約情報と課題分類情報を含む課題分類指示情報を生成AIサーバー2へ送信し、生成AIサーバー2から課題分類結果情報を受信する。プログラムは以下の通りである。
【0063】
(コードブロック9)
# 課題分類をあてはめる関数
def generate_p_class(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": f"次に入力する文章について、'{p_classification}'の中のいずれかの分類を付与してください。"},
{"role": "user", "content": text}],
temperature=0.10,
max_tokens=10,
#top_p=1.0,
frequency_penalty=0,
presence_penalty=0,
)
p_class = response["choices"][0]["message"]["content"]
return p_class
【0064】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章に対して既存の課題分類を適用する機能を提供する。
【0065】
generate_p_class(text)関数は、一つのテキスト(text)を引数として受け取る。制御部104は、そのテキスト(課題の要約)に対して既存の課題分類を適用するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側からは「次に入力する文章について、'{p_classification}'の中のいずれかの分類を付与してください。」という指示情報を送信する。この指示情報を課題分類指示情報(第1カテゴリ分類処理指示情報)とする。
【0066】
生成AIサーバー2は、与えられたテキスト(課題の要約)に対して既存の課題分類(p_classification)を適用して、課題分類結果情報(第1カテゴリ分類処理結果情報)として返信する。上記したように、p_classification変数には、例えば、「騒音と振動管理、熱管理、パワーと効率性、絡み防止と解消、ユーザーインターフェイスと操作性、電源と電池管理、設計と構造、収納と清掃、堅牢性と耐久性、接続と通信」などの要約分類が1つの文字列となり、格納されている。生成AIサーバー2からのレスポンスには、適用された課題分類のテキスト(課題分類結果情報)(例えば、「騒音と振動管理、熱管理、パワーと効率性、絡み防止と解消、ユーザーインターフェイスと操作性、電源と電池管理、設計と構造、収納と清掃、堅牢性と耐久性、接続と通信」の中のいずれかの分類テキスト)が含まれている。課題分類結果情報(第1カテゴリ分類処理結果情報)は、p_class変数に格納され、関数の出力として返される。なお、本プロンプトでは、いずれかの1つの分類に当てはめる指示を行っているが、複数の分類を付与する指示としてもよい。
【0067】
(コードブロック10)
# 課題の分類を新しい列に追加
df['p_class'] = df['p_summary'].apply(lambda x: generate_p_class(x))
【0068】
このプログラムは、データフレームdfのp_summary列に格納されている各行の文章を引数として、generate_p_class関数を呼び出す。
【0069】
generate_p_class関数は、OpenAIのGPT-4モデルを使ってテキスト(この場合は課題の要約)に対して分類を付与(適用)する役割がある。具体的には、関数は「次に入力する文章について、'{p_classification}'の中のいずれかの分類を付与してください」という指示(プロンプト)をGPT-4に与え、それに基づいてGPT-4は課題要約に対する適切な分類を付与する。
【0070】
このコードが実行されると、結果的に各課題要約(p_summary列の各行)が分類され、その結果(分類名)が、新しく作成されたdfのp_class列に格納される(図4のp_class列)。つまり、各課題要約はそれぞれ一つの分類(p_class)(例えば、「騒音と振動管理、熱管理、パワーと効率性、絡み防止と解消、ユーザーインターフェイスと操作性、電源と電池管理、設計と構造、収納と清掃、堅牢性と耐久性、接続と通信」の中のいずれかの分類)を持つことになる。
【0071】
(STEP5:解決手段要約ステップ)
次に、制御部104は、解決手段文字列情報(第2カテゴリ文字列情報)と解決手段要約指示情報(第2カテゴリ文字列要約指示情報)を生成AIサーバー2へ送信し、生成AIサーバー2から解決手段要約情報(第2カテゴリ文字列要約結果情報)を受信する。プログラムは以下の通りである。なお、STEP5~7については、STEP2~4と、取り扱う文字列が異なるものの、処理はほぼ共通するので、一部コードの説明を省略する。
【0072】
(コードブロック11)
# 解決手段の要約を生成する関数
def generate_s_summary(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "この文章が示す解決手段を15文字以内に要約してください。"},
{"role": "user", "content": text}],
temperature=0.10,
max_tokens=10,
#top_p=1.0,
frequency_penalty=0,
presence_penalty=0,
)
s_summary = response["choices"][0]["message"]["content"]
return s_summary
【0073】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章を要約する機能を提供する。
【0074】
generate_s_summary(text)関数は、1つのテキスト(text)を引数として受け取り、制御部104は、そのテキストを要約するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側から「この文章が示す解決手段を15文字以内に要約してください。」という指示情報(プロンプト)を送信する。この指示情報を解決手段要約指示情報(第2カテゴリ文字列要約指示情報)とする。なお、要約する文字数は15文字に限られず、これより多くとも少なくともよい。生成AIサーバーによる処理のtoken数の上限に応じて文字数を調整するのがよい。
【0075】
生成AIサーバー2は、与えられたテキスト(解決手段文字列情報)を解決手段要約指示情報に基づいて要約して解決手段要約情報(第2カテゴリ文字列要約結果情報)として返信する。生成AIサーバー2からのレスポンスには、要約されたテキスト(解決手段要約情報)が含まれている。解決手段要約情報はs_summary変数に格納され、関数の出力として返される。
【0076】
(コードブロック12)
# 解決手段の要約を新しい列に追加
df['s_summary'] = df['solution'].apply(lambda x: generate_s_summary(clean_text(x)))
【0077】
この部分のプログラムは、Pandasのデータフレームdfの'solution'列に格納されている各行の文章を、clean_text関数でクリーンアップした後、generate_s_summary関数を用いて要約した結果(解決手段要約情報)をdfの新しい列's_summary'に追加するためのものである(図4のs_summary列)。
【0078】
(STEP6:解決手段分類生成ステップ)
次に、制御部は、複数の解決手段要約情報(第2カテゴリ文字列要約結果情報)と解決手段分類生成指示情報(第2カテゴリ分類生成指示情報)を生成AIサーバー2へ送信し、生成AIサーバー2から解決手段分類情報(第2カテゴリ分類結果情報)を受信する。プログラムは以下の通りである。
【0079】
(コードブロック13)
# DataFrameの's_summary'列からデータを取り出し、s_summariesという変数に格納
s_summaries = df['s_summary'].values
# すべての要約を1つの文字列に結合
s_summaries_text = ', '.join(s_summaries)
【0080】
この部分のプログラムは、Pandasのデータフレームdfから's_summary'列の全ての値を取得し、それらをs_summariesという変数に格納する。具体的には、df['s_summary'].valuesがdfデータフレームの's_summary'列の全ての値を取得する。
【0081】
次に、's_summaries'変数の各要素(各解決手段の要約)をカンマとスペース(', ')で連結し、それを一つの大きな解決手段要約の文字列(s_summaries_text)に変換する。この操作により、解決手段要約のリストが一つの文字列に結合され、その後の処理で使用できるようになる。すなわち、上記要約された15文字以内の文字列を統合して1つの文字列とする処理である。例えば、要約数が50の場合には、ここでの解決手段要約の文字列(s_summaries_text)は、「一対の掻取ローラ, 運転モード自動切替機能, 吹き出し吸い込み循環構造, ヨークの特殊な形状設計, 空気流動ガイド機能, スティック収納支持台, 電源端子配置改善, 管体保持部&規制部, 抵抗検出&入力制御, 二重操作蓋開閉, 螺旋状傾斜面搭載, 二段階集塵連通装置, 吸引ノズル突出部整流, 触らず接続・支持装置, 塵埃分離器・ディスク, 吸引制御・フィルタ部, 回転ブラシ・布状部材, ロック機構・操作部材, 電池側排気通路, 兼用構造・ハンドル部, 周回進路・乗り上がり制御, 内筒構造と第2フィルタ部, 帯電部と集塵部の組み合わせ, 共用脚部と第一脚部配置, 規制線受付部と拡大表示部, 第1のサイド掃除部材, 3つの脚部と電池部, 回転清掃体と駆動機構, 制御装置と二次電池,床種類検出と制御装置, 第一遠心分離部と第二遠心分離部, 可動清掃体とサイド固定刷毛, バッテリー収容部配置」のような文字列となる。
【0082】
(コードブロック14)
# 解決手段分類を生成する関数
def generate_s_classification(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "これら解決手段の用語を10個に分類し、分類名のみを出力してください。"},
{"role": "user", "content": text}],
temperature=0.10,
max_tokens=10,
frequency_penalty=0,
presence_penalty=0,
)
s_classification = response["choices"][0]["message"]["content"]
return s_classification
【0083】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章から分類を生成する機能を提供する。
【0084】
generate_s_classification(text)関数は、1つのテキスト(text)を引数として受け取り、制御部104は、そのテキスト(解決手段要約文字列)から分類を生成するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側から「これらの解決手段の用語を10個に分類し、分類名のみを出力してください。」という指示情報(プロンプト)を送信する。この指示情報を解決手段分類生成指示情報とする。なお、解決手段の分類数は10個に限られず、それ以上でも以下でもよい。また、プロンプトの内容はこれに限られず、より詳細な指示としてもよい。
【0085】
生成AIサーバー2は、与えられたテキスト(解決手段要約文字列)を解決手段分類生成指示情報に基づいて分類を生成して、解決手段分類生成結果情報(第2カテゴリ分類生成結果情報)として返信する。生成AIサーバー2からのレスポンスには、解決手段分類のテキスト(解決手段分類情報)が含まれている。解決手段分類情報はs_classification変数に格納され、関数の出力として返される。
【0086】
(コードブロック15)
# 解決手段分類を生成
s_classification = generate_s_classification(s_summaries_text)
【0087】
このプログラムは、上記生成したs_summaries_text(全ての解決手段の要約を一つの文字列に結合したもの)を引数として、generate_s_classification関数を呼び出す。
【0088】
generate_s_classification関数は、OpenAIのGPT-4モデルを使ってテキスト(この場合は解決手段の要約)の分類を生成する役割がある。具体的には、関数は「これらの解決手段の用語を10個に分類し、分類名のみを出力してください」という指示(プロンプト)をGPT-4に与え、それに基づいてGPT-4は10個のカテゴリーを生成する。
【0089】
このコードが実行されると、結果的に解決手段の要約(s_summaries_text)が10個のカテゴリに分類され、その結果(分類名)がs_classification変数に格納される。すなわち、s_classification変数には、例えば、「操作と制御機構、構造と設計、集塵装置、電源と充電装置、保守と寿命管理、形状と設計、ブラシと清掃機構、ユーザーインターフェースと機能、空気流と排気装置、電源と充電装置」などの10個の解決手段分類が1つの文字列となり、格納されている。
【0090】
(STEP7:解決手段分類処理ステップ)
次に、制御部104は、複数の解決手段要約情報と解決手段分類情報を含む解決手段分類指示情報を生成AIサーバー2へ送信し、生成AIサーバー2から解決手段分類結果情報(第2カテゴリ分類処理結果情報)を受信する。プログラムは以下の通りである。
【0091】
(コード16)
# 解決手段分類をあてはめる関数
def generate_s_class(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": f"次に入力する文章について、'{s_classification}'の中のいずれかの分類を付与してください。"},
{"role": "user", "content": text}],
temperature=0.10,
max_tokens=10,
#top_p=1.0,
frequency_penalty=0,
presence_penalty=0,
)
s_class = response["choices"][0]["message"]["content"]
return s_class
【0092】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章に対して既存の解決手段分類を適用する機能を提供する。
【0093】
generate_s_class(text)関数は、一つのテキスト(text)を引数として受け取る。制御部104は、そのテキスト(解決手段の要約)に対して既存の解決手段分類を適用するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側からは「次に入力する文章について、'{s_classification}'の中のいずれかの分類を付与してください。」という指示情報を送信する。この指示情報を解決手段分類指示情報とする。
【0094】
生成AIサーバー2は、与えられたテキスト(解決手段の要約)に対して既存の解決手段分類(p_classification)を適用して、解決手段分類処理結果情報(第2カテゴリ分類処理結果情報)として返信する。s_classification変数には、例えば、「操作と制御機構、構造と設計、集塵装置、電源と充電装置、保守と寿命管理、形状と設計、ブラシと清掃機構、ユーザーインターフェースと機能、空気流と排気装置、電源と充電装置」などの解決手段分類が1つの文字列となり、格納されている。生成AIサーバー2からのレスポンスには、適用された解決手段分類のテキスト(解決手段分類処理結果情報)(例えば、「操作と制御機構、構造と設計、集塵装置、電源と充電装置、保守と寿命管理、形状と設計、ブラシと清掃機構、ユーザーインターフェースと機能、空気流と排気装置、電源と充電装置」の中のいずれかの分類テキスト)が含まれている。解決手段分類結果情報はs_class変数に格納され、関数の出力として返される。なお、本プロンプトでは、いずれか1つの分類に当てはめる指示を行っているが、複数の分類を付与する指示としてもよい。
【0095】
(コードブロック17)
# 解決手段の分類を新しい列に追加
df['s_class'] = df['s_summary'].apply(lambda x: generate_s_class(x))
【0096】
このプログラムは、データフレームdfのs_summary列に格納されている各行の文章を引数として、generate_s_class関数を呼び出す。
【0097】
generate_s_class関数は、OpenAIのGPT-4モデルを使ってテキスト(この場合は解決手段の要約)に対して分類を付与(適用)する役割がある。具体的には、関数は「次に入力する文章について、'{s_classification}'の中のいずれかの分類を付与してください」という指示をGPT-4に与え、それに基づいてGPT-4は解決手段要約に対する適切な分類をする。
【0098】
このコードが実行されると、結果的に各解決手段要約(s_summary列の各行)が分類され、その結果(分類名)が新しく作成されたdfのs_class列に格納される。つまり、各解決手段要約はそれぞれ一つの分類(s_class)(例えば、操作と制御機構、構造と設計、集塵装置、電源と充電装置、保守と寿命管理、形状と設計、ブラシと清掃機構、ユーザーインターフェースと機能、空気流と排気装置、電源と充電装置の中のいずれかの分類)を持つことになる(図4のs_class列)。
【0099】
(STEP8:集計ステップ)
次に、制御部104は、複数の要約(文字列情報)を、課題分類及び解決手段分類ごとに、クロス集計を行う。プログラムは以下の通りである。
【0100】
(コードブロック18)
# 「'p_class'」と「's_class'」の列でグループ化し、グループ内の要素数を数える
result = df.groupby(['p_class', 's_class']).size().reset_index(name='Counts')
【0101】
このプログラムでは、制御部104は、データフレームを p_class と s_class でグループ化し、要約を、課題分類及び解決手段分類ごとに、カウント(集計)する、いわゆるクロス集計を実行する。この操作により、各課題に対する解決手段の出現頻度を知ることができる。
【0102】
(STEP9:視覚化ステップ)
次に、制御部104は、上記で導出されたp_classとs_classを使用して視覚化する。プログラムは以下の通りである。
【0103】
(コードブロック19)
# マップ生成
! pip install japanize-matplotlib
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.cm as cm
import japanize_matplotlib
# 「'p_class'」と「's_class'」の列からなる値をリスト形式に変換
y = result['p_class'].tolist()
x = result['s_class'].tolist()
# 「Counts」列からなる値を元に、散布図のすべての点の大きさを示すリストを作成
sizes = [size * 100 for size in result['Counts'].tolist()]
# 「Counts」列からなる値を元に、散布図のすべての点のカウント数を示すリストを作成
nums = [num for num in result['Counts'].tolist()]
# 「s_class」列からなる値を元に、カテゴリーのリストを作成
categories = list(set(y))
# 色マップを作成
colors = cm.rainbow(np.linspace(0, 1, len(categories)))
colors = {categories[i]: colors[i] for i in range(len(categories))}
colors = [colors[item] for item in y]
# 散布図を作成
fig, ax = plt.subplots(figsize=[8,8])
ax.scatter(x, y, s=sizes, c=colors)
# 散布図にカウント数を表示
for i, txt in enumerate(nums):
ax.annotate(txt, (x[i], y[i]), textcoords="offset points", xytext=(0,0), ha='left', va='bottom')
# x 軸のラベルを設定する。
ax.set_xlabel("解決手段")
# y 軸のラベルを設定する。
ax.set_ylabel("課題")
# タイトルを設定する。
ax.set_title("課題-解決手段マップ")
# X軸項目を90°傾ける
plt.xticks(rotation=90)
# 図を表示
plt.show()
【0104】
このプログラムでは、日本語のテキストデータを処理して、いわゆる、課題-解決手段マップを作成している。
【0105】
制御部104は、matplotlibを使用して散布図を作成する。x軸にはs_class、y軸にはp_classを配置し、各点の大きさと色を、それぞれのカテゴリに基づいて設定する。具体的には、グループ化した結果のy列の値(課題のカテゴリ)に対応する色を、rainbowカラーマップで生成したカラーリストから取得する。また、各点には、その点が表すカテゴリのカウント数が表示される。
【0106】
最後に、制御部104は、グラフのスタイルを設定し、外部I/F106を介して接続した液晶ディスプレイ等の表示装置(不図示)にグラフを表示する(図5)。なお、マップ化はmatplotlibではなくseaborn等の他のライブラリを使用してもよいし、グラフではなく、crosstab関数により、二元表の形式やヒートマップの形式で出力することでもよい。
【0107】
また、視覚化はこれに限られず、特許データの出願日と上記分類との関係を示す時系列図としたり、特許データの出願人と上記分類との関係を示す折れ線や棒グラフとしてもよい。
【0108】
実施形態では、プログラミング言語としてpythonを使用したが、他のプログラミング言語を使用して実施形態の処理をすることでもよい。また、ExcelやGoogleスプレッドシート等の表計算ソフトのVBAやGAS等を使用して実施形態の処理をすることでもよい。また、ChatGPTとExcelへの入出力は人間が行うこととなるものの、ChatGPTとExcelを使用して、実施形態の処理をすることでもよい。
【0109】
また、実施形態では、生成AIサーバーによる処理のtoken数の上限の関係上、STEP2と5で課題と解決手段の要約を生成しているが、token数の上限がない場合には、STEP2と5を省略してもよい。この場合のプログラムは、次のようになる。大規模言語モデルを使用した自然言語処理を提供する生成AIサーバーにネットワークを介して接続した、コンピュータに、複数の特許データの要約書の各々から、課題文字列情報と解決手段文字列情報を抽出する処理と、複数の課題文字列情報と課題分類生成指示情報、及び、複数の解決手段文字列情報と解決手段分類生成指示情報、を生成AIサーバーへ送信する処理と、生成AIサーバーが課題分類生成指示情報に基づいて、複数の課題文字列情報から生成した課題分類情報と、生成AIサーバーが解決手段分類生成指示情報に基づいて、複数の解決手段文字列情報から生成した解決手段分類情報と、を生成AIサーバーから受信する処理と、複数の課題文字列情報と課題分類情報を含む課題分類指示情報、及び、複数の解決手段文字列情報と解決手段分類情報を含む解決手段分類指示情報、を生成AIサーバーへ送信する処理と、生成AIサーバーが課題分類指示情報に基づいて課題文字列情報を分類した課題分類結果情報と、生成AIサーバーが解決手段分類指示情報に基づいて解決手段文字列情報を分類した解決手段分類結果情報と、を生成AIサーバーから受信する処理と、課題分類結果情報と、解決手段分類結果情報と、から集計する処理と、を実行させるプログラム。
【0110】
(実施形態2:アンケート分析)
次に、実施形態2の分類処理プログラム及び方法の処理手順を説明する。なお、実施形態2では、掃除機のユーザーレビューを、分類、集計し、視覚化する例を示す。下記コードブロック1から8を連続してつなげたものが、実施形態のプログラム及び方法であり、基本的には連続して記載すべきものである。ただし、説明しやすさを考慮して、分割して説明する。
【0111】
実施形態2の分類処理プログラム及び方法の処理では、STEP1で、ニーズ分類(自然言語による分類)を生成し、STEP2で、ユーザーレビューを分類し、STEP3で、分類したユーザーレビューを集計し、STEP4で集計結果を視覚化する(フローチャートは省略)。
【0112】
(STEP1:分類生成ステップ)
まず、制御部104は、複数のユーザーレビューからデータフレームを作成する。プログラムは以下の通りである。なお、下記プログラムは、情報処理装置(端末1)の制御部に格納された、Pythonによるプログラムである。ただし、他のプログラミングツールやプログラミング言語を使用することでもよい。また、下記プログラムはあくまで一例であり、処理順序や使用するライブラリや関数や変数名は変更してよい。
【0113】
(コードブロック1)
import pandas as pd
from google.colab import drive
drive.mount('/content/drive')
df = pd.read_excel('/content/drive/MyDrive/reviewdata.xlsx')
【0114】
このプログラムの説明を詳しくすると、以下のようになる。まず、制御部104は、pandasというモジュールをインポートする。pandasはPythonでデータ分析を行うためのツールである。次に、google.colabというモジュールからdriveという関数をインポートする。driveはGoogleドライブにアクセスするための関数である。
【0115】
制御部104は、drive関数を実行して、Googleドライブを'/content/drive'というパスにマウントする。マウントとは、GoogleドライブのファイルやフォルダをColab上で操作できるようにすることである。
【0116】
制御部104は、pd.read_excel関数を使って、'/content/drive/MyDrive/reviewdata.xlsx'というパスにあるreviewdata.xlsxというExcelファイルを読み込む。このExcelファイルには複数件のユーザーレビューが格納されている。データフレームの一部を図6に示す。レビューデータのreview列にはユーザーレビューの内容が格納されている。なお、図6ではスペースの関係上3件のみの例示となっているが、実施形態では100件のデータフレームを使用している。もちろんこれ以上もしくはこれ以下の件数も可能である。
【0117】
制御部104は、読み込んだファイルをdfという変数に代入する。dfはデータフレームと呼ばれる表形式のデータ構造である。df['review']とすることで、dfの中からreviewという列だけを取り出す。review列には、自然言語からなるユーザーレビューの内容(レビュー文字列情報)が格納されている。
【0118】
(コードブロック2)
! pip install openai
import openai
【0119】
このコマンドは、OpenAIのPythonライブラリをインストールするためのものである。!は、コマンドをシェルコマンドとして解釈することを示す。pipは、Pythonのパッケージマネージャーで、installはライブラリをインストールするために使用されるコマンドである。
【0120】
制御部104は、openaiというPythonライブラリをインポートする。openaiライブラリは、OpenAIのAPIを使用して様々な自然言語処理タスクを実行するためのものである。なお、openaiライブラリの使用には、実際にはAPIキーの入力が必要であるが、公開には支障があるため、プログラムの記載からは割愛している。
【0121】
(コードブロック3)
# ニーズ分類を生成する関数
def generate_n_classification():
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": "掃除機のニーズ分類を10個生成し、分類名のみを出力してください。"},
],
temperature=0.10,
max_tokens=100,
frequency_penalty=0,
presence_penalty=0,
)
n_classification = response["choices"][0]["message"]["content"]
return n_classification
【0122】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、掃除機のニーズ分類を生成する機能を提供する。
【0123】
generate_n_classification()関数は、分類を生成するためにOpenAIのChat Completion APIを呼び出す。APIは、システムの役割で構成されるメッセージを送信し、システム側から「掃除機のニーズ分類を10個生成し、分類名のみを出力してください。」という指示情報(プロンプト)を送信する。この指示情報をニーズ分類生成指示情報とする。なお、ニーズの分類数は10個に限られず、それ以上でも以下でもよい。また、プロンプトの内容はこれに限られず、より詳細な指示としてもよい。実施形態1では、特許データから分類を生成したが、実施形態2では、事前にレビューデータを与えず、大規模言語モデルが有する学習データから分類を生成している。掃除機のように十分に製品に関する学習データが大規模言語モデル内に存在する場合には、本手法を採用できる。
【0124】
生成AIサーバー2は、ニーズ分類生成指示情報に基づいてニーズ分類を生成して、ニーズ分類生成結果情報として返信する。生成AIサーバー2からのレスポンスには、ニーズ分類のテキスト(ニーズ分類)が含まれている。ニーズ分類はn_classification変数に格納され、関数の出力として返される。
【0125】
(コードブロック4)
# ニーズ分類を生成
n_classification = generate_n_classification()
【0126】
このプログラムは、generate_n_classification関数を呼び出す。
【0127】
generate_n_classification関数は、OpenAIのGPT-4モデルを使ってテキスト(この場合はニーズ)の分類を生成する役割がある。具体的には、関数は「掃除機のニーズ分類を10個生成し、分類名のみを出力してください。」という指示(プロンプト)をGPT-4に与え、それに基づいてGPT-4は10個のニーズ分類を生成する。
【0128】
このコードが実行されると、生成AIサーバー2により、‘心地よい清潔感’、‘労力の軽減感’、‘家事の効率向上’、‘安心の衛生管理’、‘ストレスフリー操作’、‘自宅への誇り感’、‘使い心地の満足度’、‘快適な居住環境’、‘時間節約の充実感’、‘賢い選択の自信’の10個のニーズの分類が生成され、その結果(分類名)がn_classification変数に格納される。すなわち、n_classification変数には、「‘心地よい清潔感’、‘労力の軽減感’、‘家事の効率向上’、‘安心の衛生管理’、‘ストレスフリー操作’、‘自宅への誇り感’、‘使い心地の満足度’、‘快適な居住環境’、‘時間節約の充実感’、‘賢い選択の自信’」のように、10個のニーズ分類が1つの文字列となり、格納されている。
(STEP2:分類処理ステップ)
【0129】
次に、制御部104は、複数のレビュー文字列情報と複数のニーズ分類を含むニーズ分類処理指示情報を生成AIサーバーへ送信し、生成AIサーバーからニーズ分類処理結果情報を受信する。プログラムは以下の通りである。
【0130】
(コードブロック5)
def generate_n_class(text):
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[
{"role": "system", "content": f"次に入力する文章について、'{n_classification}'の中のいずれかの分類を付与してください。"},
{"role": "user", "content": text}])
n_class = response["choices"][0]["message"]["content"]
return n_class
【0131】
このプログラムは、OpenAIの言語モデル「GPT-4」を使用して、与えられた文章を5つの分類のうちの1つに分類する機能を提供する。なお、言語モデルは「GPT-4」に限られず、「GPT-4 Turbo」や「GPT-3.5 Turbo」であってもよいし、次バージョンのGPTシリーズであってもよい。
【0132】
generate_n_class(text)関数は、1つのテキスト(text)を引数として受け取り、制御部104は、そのテキストを分類するためにOpenAIのChat Completion APIを呼び出す。APIは、システムとユーザーの2つの役割で構成されるメッセージを送信し、システム側から「次に入力する文章について、'{n_classification}'の中のいずれかの分類を付与してください。」という指示を送信する。この指示情報をニーズ分類処理指示情報とする。
【0133】
なお、上記したように、n_classification変数には、「‘心地よい清潔感’、‘労力の軽減感’、‘家事の効率向上’、‘安心の衛生管理’、‘ストレスフリー操作’、‘自宅への誇り感’、‘使い心地の満足度’、‘快適な居住環境’、‘時間節約の充実感’、‘賢い選択の自信’」のように、10個のニーズ分類の文字列が格納されている。また、指示内容(プロンプト)をさら詳しくしてもよい。また、実施形態では、いずれか1つに分類する指示としているが、複数に分類する指示としてもよい。また、分類数は10に限られず、それ以上でも以下でもよい。
【0134】
生成AIサーバー2は、与えられたテキスト(ニーズ文字列情報)をニーズ分類指示情報に基づいて適切な分類に分類して、ニーズ分類処理結果情報として返信する。生成AIサーバー2からのレスポンスには、分類された分類のテキスト(ニーズ分類結果情報)が含まれている。ニーズ分類結果情報は、n_class変数に格納され、関数の出力として返される。
【0135】
(コードブロック6)
df['n_class'] = df['review'].apply(lambda x: generate_n_class(x))
【0136】
このプログラムは、Pandasのデータフレームdfのreview列に格納されている各行の文章をgenerate_n_class関数で処理、分類(n_class)を生成した結果をdfの新しい列n_classに追加するためのものである。
【0137】
制御部104は、applyメソッドを使って、df['review']列の各行の文字列に、lambda x:は、xに適用される引数を表す。
【0138】
制御部104は、generate_n_class関数に文章を渡して、文章を10つの分類のいずれかに分類した結果を、df['n_class']列に代入する。最終的に、図9に示すように、新しいn_class列を含むデータフレームdfが返される。
【0139】
図7は、n_class列が、STEP2の処理により追加されたデータフレームを示す。なお、図7ではスペースの関係上20件(20行)のみの例示となっているが、実施形態では100件(100行)からなるデータフレームdfが生成される。また、review列の内容は図6に記載したので省略している。
【0140】
(STEP3:集計ステップ)
次に、制御部104、ニーズ分類処理結果情報に基づいて、複数のレビュー(文字列情報)を、複数の分類(ニーズ分類)ごとに集計する処理を行う。
【0141】
(コードブロック7)
df_n_class_counts = df['n_class'].value_counts().sort_index().reset_index()
df_n_class_counts.columns = ["ニーズ分類", "件数"]
【0142】
df['n_class'].value_counts(): この部分では、データフレーム df の n_class という列に含まれる値の出現頻度を計算している。value_counts() 関数は、異なる値がデータフレーム内にどの程度の頻度で出現するかを数え、それらの頻度を持つ新しいデータフレームまたはシリーズを返す。
【0143】
.sort_index(): このメソッドは、得られた頻度のデータをインデックス(ここでは n_class の値)に基づいて並び替える。これは、デフォルトでは値の出現頻度に基づいて並べ替えられるので、元の値(n_class)に基づいて再度並べ替えるために使用される。
【0144】
.reset_index(): このメソッドはインデックスをリセットし、既存のインデックスを通常の列に変換する。これにより、元のインデックス(n_class の値)が新しいデータフレームの列として保持される。
【0145】
df_n_class_counts.columns = ["ニーズ分類", "件数"]: 最後に、新しく作成されたデータフレーム df_n_class_counts の列名を変更する。最初の列(元の n_class の値)を「ニーズ分類」と名付け、頻度の値を持つ2番目の列を「件数」と名付けている。
【0146】
(STEP4:視覚化ステップ)
次に、制御部104は、集計結果を視覚化する。プログラムは以下の通りである。
【0147】
(コードブロック8)
! pip install japanize-matplotlib
import matplotlib.pyplot as plt
import japanize_matplotlib
plt.figure(figsize=(10, 6))
plt.plot(df_n_class_counts['ニーズ分類'], df_n_class_counts['件数'])
plt.title('ニーズ分類ごとの件数')
plt.xlabel('ニーズ分類')
plt.ylabel('件数')
plt.show()
【0148】
!pip install japanize-matplotlib: これは japanize-matplotlib パッケージをインストールするコマンドである。このパッケージは、matplotlibで日本語を正しく表示するために使用される。
【0149】
import matplotlib.pyplot as plt: ここでは、matplotlibのpyplotモジュールを plt という名前でインポートする。
【0150】
import japanize_matplotlib: この行では、先ほどインストールした japanize-matplotlib ライブラリをインポートする。
【0151】
plt.figure(figsize=(10, 6)): これは、グラフのサイズを指定している。ここでは、幅が10インチ、高さが6インチの図(グラフ)を作成する。
【0152】
plt.plot(df_n_class_counts['ニーズ分類'], df_n_class_counts['件数']): この行で、df_n_class_counts データフレームのニーズ分類列をx軸に、件数列をy軸にプロットしている。これにより、ニーズ分類と件数の関係がラインチャート(折れ線グラフ)で表示される。
【0153】
plt.title('ニーズ分類ごとの件数'): ここでグラフにタイトルを設定している。タイトルは「ニーズ分類ごとの件数」とされる。
【0154】
plt.xlabel('ニーズ分類') と plt.ylabel('件数'): これらの行は、それぞれx軸とy軸にラベルを設定している。x軸のラベルは「ニーズ分類」、y軸のラベルは「件数」としている。
【0155】
plt.show(): 最後に、この行はmatplotlibで作成したグラフを表示するためのものである。これにより、上述の設定に基づいたグラフが画面に表示される。
【0156】
制御部104は、外部I/F106を介して接続した液晶ディスプレイ等の表示装置(不図示)にグラフを表示する(図8)。
【0157】
また、視覚化はこれに限られず、棒グラフとしてもよい。matplotlibを使用することにより、様々な形式の視覚化が可能である。
【0158】
上記実施形態では、Pythonによる処理について説明したが、これに限られず、エクセルなどのスプレッドシートとChatGPTやAPIを一部もしくは全部組み合わせて使用することでも同様の処理を行うことが可能である。
【0159】
また、分類のカテゴリは、課題と解決手段やニーズに限られず、分析の目的に応じて、品質、効果、用途、及び、便益等の任意の自然言語によるカテゴリーの分類としてもよい。また、分類対象の文章・文字列は特許データに限られず、例えば論文やアンケートなどの、自然言語による文字列であれば限定はない。
【0160】
以上、実施形態を説明したが、この実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。この新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。この実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【符号の説明】
【0161】
101 CPU、102 ROM、103 RAM、104 制御部、105 HDD、106 外部I/F、107 入力部、108 システムバス

図1
図2
図3
図4
図5
図6
図7
図8