TobyText wünscht Ihnen ein frohes neues Jahr

0

Das turbulente Jahr 2015 hat für Sie hoffentlich einen friedlichen Ausgang gefunden und auch ein Sie zufriedenstellendes Abschlussergebnis. Nachdem ich Ihnen für die Weihnachtsfeiertage aus meiner kompositorischen, malerischen SAS-Bastel-Programm-Bibliothek Anregungen zu Entspannung für besinnliche Momente zum Jahreswechsel anbieten konnte, sind nun im Januar 2016 alle Jahreszähler wieder auf Null zurückgesetzt.

Wir müssen uns darauf vorbereiten im knallharten Wettbewerb des neuen Jahres zu bestehen, damit wir unser Gehalt auch wirklich verdienen. So kommt nun im neuen Jahr eine Serie verschiedener Text Analytics Tipps, einige ganz simple einfache für Einsteiger, und einige für Abgefahrene Data Scientisten. Zur Übersicht nummeriere ich sie mit diesen beiden Labeln durch. Mein erster Text Analytics Tipp ist ein Anwendungsfall für die Untersuchung der Verletzung von eigenen Patentrechten durch fremde Patentanmeldungen.

Frage: Was sind die ähnlichsten Dokumente zu einem oder mehreren Dokumenten mit „patentierten Text Inhalt“ oder einer Untergruppe von Dokumenten?

Diese Fragestellung betrifft in Deutschland viele innovative Unternehmen, die Patente anmelden. Dazu gehören global Player wie Siemens, Robert Bosch, BASF und Bayer, Boehringer, Merck, aber auch Firmen aus der vermeintlich zweiten Reihe wie Continental, Henkel, Beiersdorf oder Ratiopharm. Im Patentwesen möchte man regelmäßig überprüfen, welche firmenfremde Neuanmeldung eventuell eigene schon angemeldete und genehmigte Patente verletzen könnte. Dafür gibt es kein dezidiert einfaches analytisches Vorgehen, weil die Inhalte der Patente immer wieder aus neuen Worten und Fachtermini bestehen. Außerdem muss man die Beziehung von jedem patent-relevanten Dokument zu allen anderen Dokumenten analysieren, eine Aufgabe, die über alle Zeilen hinweg in der Tabelle mit ca. 90 millionen Patenttexten des Globalen Patent Index des Europäischen Patentamtes ESPACENET durchgeführt werden müsste.

Die PROC DISTANCE in SAS/STAT könnte so eine Distanzmatrix auf Basis von SVDs und TextTopics aus der PROC HPTMINE vom Contextual Analysis oder Text Miner aufbauen. Allerdings ist PROC DISTANCE begrenzt auf die Analyse von maximal 32000 Dokumenten, weil dann die Anzahl an Variablen in der Distanzmatrix das für SAS zulässige Maximum überschreitet. Auch ist die überwiegende Mehrheit der Koeffizienten in der Distanzmatrix völlig unnütz, benötigt man ja nur die Distanz zwischen den wenigen eigenen Patendokumenten, und den z.B. 3 jeweils nächsten Patentanmeldungen fremder Firmen. Für diesen Anwendungsfall suchen wir also einen möglichst effizienten aber gangbaren Weg unter Umgehung der Berechnung der vollen Distanzmatrix, die bei n=90 Mio. Patentdokumenten n**2 Koeffizienten hätte. Dafür gibt es mit PROC FASTCLUS, und der Maxiter=0 Option sowie dem In-Seed Data Set einen eleganten Trick der nur wenigen Analytikern bekannt ist:

Man nehme die wenigen eigenen Patentdokumente und speichere Sie im „In-Seed“ Data Set ab. Diese werden per Definition die Cluster Mittelpunkte. Man rufe die PROC FASTCLUS auf der Gesamttabelle ohne die eigenen „In-Seed-Dokumente“ auf und nutzt die Maxiter=0 Option.

Im Ergebnis wird dann nur ein Mal die Distanz zu jedem der „In-Seeds“ Dokumente berechnet und eine Clusterzuordnung zum nächsten Seed bestimmt. Mit PROC RANK bestimmt man z.B. die ersten drei ähnlichsten Dokumente je Seed, die man im Detail durchlesen und auf Patentverletzung untersuchen möchte. Das ganze läuft sehr schnell, überwindet die technischen Grenzen der PROC DISTANCE, minimiert den Rechenaufwand und ist einfach zu programmieren. Man muss nur wissen wie. Und hier ist der der Code dazu. Bei Bedarf kann ich Ihnen zum Test eine Analysetabelle zur Verfügung stellen.

Stay Tuned,

TobyText

libname ta ‘c:\temp\patent’;

data ta.doc (drop=docid rename=damage_fire=Kunde);
set mysasfil.tm_nhtsa_gross(keep=text docid damage_fire
where=(damage_fire eq 1 or docid le 30000));
doc+1;
run;

proc hptmine data=ta.doc;
doc_id doc; var text;
parse termwgt=entropy cellwgt=log
stop=sashelp.engstop
outconfig=config
outterms=hp_key;
svd max_k=50 res=high
svdu=ta.u svdv=ta.v svds=ta.s
outdocpro=ta.doc_svd keepvars=(_all_);
;
run;

data ta.Kunde ta.not_Kunde;
set ta.doc_svd;
if Kunde then output ta.Kunde;
if not Kunde then output ta.not_Kunde;
run;

proc sql noprint;select sum(Kunde) into : no_cl
from ta.Kunde;
quit;
%put &=no_cl;

proc fastclus noprint data=ta.doc_svd
seed=ta.Kunde
outseed=ta.Kunde_out
maxiter=0
out=ta.Patent_Kunde_zuordnungen
maxclusters=&no_cl.;
var col:;
id doc;
run;

proc sort data=ta.Patent_Kunde_zuordnungen;
by cluster distance doc;
run;

data ta.Patent_Kunde_zuord ta.Patent_Kunde_zuord_top3pcl;
set ta.Patent_Kunde_zuordnungen;
by cluster;
if first.cluster then rank=0;
rank+1;
if rank le 3 then output ta.Patent_Kunde_zuord_top3pcl;
output ta.Patent_Kunde_zuord;
run;

 

Share

About Author

Toby Text

Principal Solutions Architect

Sie schauen gerade auf mein Profilbild und verstehen wahrscheinlich genau so wenig wie ich, nämlich gar nichts. Vermutlich sehen Sie wahrlos verstreute Pixel auf einem Quadrat. Einige davon bilden wenige offensichtliche Grundmuster, die aber auch nichts konkretes aussagen. Man hat nicht die geringste Idee über die Zusammenhänge der Pixel und den Gesamtinformationen des Bildes. So sieht die mühsame Realität des Alltages eines Data Scientist aus. Wie das menschliche Auge bei der Betrachtung des Bildes, so ist der Data Scientist ratlos und benötigt Hilfe, wenn sich die Berge an operativen Daten vor ihm anhäufen. Hätten Sie gedacht, dass Sie die Lösung zum Verständnis des obigen Bildes vielleicht sogar schon seit langem mit sich in Ihrer Tasche tragen, davon nur noch nicht wussten? Überlegen Sie mal kurz und probieren Sie es aus. Und so wie Sie mit Ihrer Intuition vielleicht eine praktikable Lösung gefunden haben, so hat ein Data Scientist im richtigen Moment den genialen Einfall und findet einen erleuchtenden methodischen Ansatz den er allerdings noch nie konkret angewendet hat, zu dessen Realisierung er nur noch in die Tasche greifen muss, um die passende Softwarefunktionalität für die Implementierung herauszuziehen. Über solche interessante Softwarefunktionalität für Ihre Projekte möchte ich Sie informieren in meinem Blog.

Leave A Reply

Back to Top