natural - machine learning python español pdf
Extraer una información de la página web mediante aprendizaje automático (8)
El enfoque debe ser un algoritmo de aprendizaje supervisado (por lo general, producen resultados mucho mejores que los métodos no supervisados o semi-supervisados). Además, tenga en cuenta que básicamente necesita extraer fragmentos de texto. Intuitivamente, su algoritmo necesita decir algo así como "de este personaje en adelante, para las próximas tres líneas, es una dirección postal".
Siento que una forma natural de abordar esto será una combinación de modelos de lenguaje de n-gramas a nivel de palabra y de personaje. El modelado en sí mismo puede ser increíblemente sofisticado. Como señaló mcstar, https://stats.stackexchange.com/ es un mejor lugar para entrar en esos detalles.
Me gustaría extraer un tipo específico de información de páginas web en Python. Digamos dirección postal. Tiene miles de formas, pero aún así, es de alguna manera reconocible. Como hay una gran cantidad de formularios, probablemente sería muy difícil escribir expresiones regulares o incluso algo así como una gramática y usar un generador de analizadores para analizarlos.
Así que creo que la forma en que debería ir es el aprendizaje automático . Si lo entiendo bien, debería poder hacer una muestra de datos donde señalaré cuál debería ser el resultado y luego tengo algo que puede aprender de esto cómo reconocer el resultado por sí mismo. Esto es todo lo que sé sobre el aprendizaje automático. Tal vez podría usar un poco de procesamiento de lenguaje natural, pero probablemente no mucho, ya que todas las bibliotecas trabajan con inglés en su mayoría y lo necesito para el checo.
Preguntas:
- ¿Puedo resolver este problema fácilmente mediante aprendizaje automático? ¿Es una buena forma de ir?
- ¿Hay algún ejemplo simple que me permita comenzar? Soy principiante en aprendizaje automático y necesito algo práctico para empezar; más cerca de mi problema es mejor; más simple es mejor.
- Hay muchas bibliotecas de Python para aprendizaje automático. ¿Cuál se adaptaría mejor a mi problema?
- Muchas de estas librerías no tienen documentos muy fáciles de usar, ya que provienen del entorno científico. ¿Hay alguna buena fuente (libros, artículos, inicios rápidos) que salven la brecha, es decir, se centre en los novatos que no saben nada sobre el aprendizaje automático? Todos los documentos que abro comienzan con términos que no entiendo, como red , clasificación , conjuntos de datos , etc.
Actualizar:
Como todos ustedes mencionaron, debo mostrar un dato que intento sacar de la web, aquí hay un ejemplo. Estoy interesado en horarios de cine. Se ven así (tres de ellos):
<div class="Datum" rel="d_0">27. června – středa, 20.00
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=0" rel="0" class="Nazev">Zahájení letního kina
</a><div style="display: block;" class="ajax_box d-0">
<span class="ajax_box Orig_nazev">zábava • hudba • film • letní bar
</span>
<span class="Tech_info">Svět podle Fagi
</span>
<span class="Popis">Facebooková komiksová Fagi v podání divadla DNO. Divoké písně, co nezařadíte, ale slušně si na ně zařádíte. Slovní smyčky, co se na nich jde oběsit. Kabaret, improvizace, písně, humor, zběsilost i v srdci.<br>Koncert Tres Quatros Kvintet. Instrumentální muzika s pevným funkovým groovem, jazzovými standardy a neodmyslitelnými improvizacemi.
</span>
<input class="Datum_cas" id="ajax_0" type="text">
</div>
<div class="Datum" rel="d_1">27. června – středa, 21.30
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=1" rel="1" class="Nazev">Soul Kitchen
</a><div style="display: block;" class="ajax_box d-1">
<span class="ajax_box Orig_nazev">Soul Kitchen
</span>
<span class="Tech_info">Komedie, Německo, 2009, 99 min., čes. a angl. tit.
</span>
<span class="Rezie">REŽIE: Fatih Akin
</span>
<span class="Hraji">HRAJÍ: Adam Bousdoukos, Moritz Bleibtreu, Birol Ünel, Wotan Wilke Möhring
</span>
<span class="Popis">Poslední film miláčka publika Fatiho Akina, je turbulentním vyznáním lásky multikulturnímu Hamburku. S humorem zde Akin vykresluje příběh Řeka žijícího v Německu, který z malého bufetu vytvoří originální restauraci, jež se brzy stane oblíbenou hudební scénou. "Soul Kitchen" je skvělá komedie o přátelství, lásce, rozchodu a boji o domov, který je třeba v dnešním nevypočitatelném světě chránit víc než kdykoliv předtím. Zvláštní cena poroty na festivalu v Benátkách
</span>
<input class="Datum_cas" id="ajax_1" type="text">
</div>
<div class="Datum" rel="d_2">28. června – čtvrtek, 21:30
</div><input class="Datum_cas" id="2012-06-28" readonly=""><a href="index.php?den=2" rel="2" class="Nazev">Rodina je základ státu
</a><div style="display: block;" class="ajax_box d-2">
<span class="Tech_info">Drama, Česko, 2011, 103 min.
</span>
<span class="Rezie">REŽIE: Robert Sedláček
</span>
<span class="Hraji">HRAJÍ: Igor Chmela, Eva Vrbková, Martin Finger, Monika A. Fingerová, Simona Babčáková, Jiří Vyorálek, Jan Fišar, Jan Budař, Marek Taclík, Marek Daniel
</span>
<span class="Popis">Když vám hoří půda pod nohama, není nad rodinný výlet. Bývalý učitel dějepisu, který dosáhl vysokého manažerského postu ve významném finančním ústavu, si řadu let spokojeně žije společně se svou rodinou v luxusní vile na okraji Prahy. Bezstarostný život ale netrvá věčně a na povrch začnou vyplouvat machinace s penězi klientů týkající se celého vedení banky. Libor se následně ocitá pod dohledem policejních vyšetřovatelů, kteří mu začnou tvrdě šlapat na paty. Snaží se uniknout před hrozícím vězením a oddálit osvětlení celé situace své nic netušící manželce. Rozhodne se tak pro netradiční útěk, kdy pod záminkou společné dovolené odveze celou rodinu na jižní Moravu… Rodinný výlet nebo zoufalý úprk před spravedlností? Igor Chmela, Eva Vrbková a Simona Babčáková v rodinném dramatu a neobyčejné road-movie inspirované skutečností.
</span>
O así:
<strong>POSEL 18.10.-22.10 v 18:30 </strong><br>Drama. ČR/90´. Režie: Vladimír Michálek Hrají: Matěj Hádek, Eva Leinbergerová, Jiří Vyorávek<br>Třicátník Petr miluje kolo a své vášni podřizuje celý svůj život. Neplánuje, neplatí účty, neřeší nic, co může<br>počkat do zítra. Budování společného života s přételkyní je mu proti srsti stejně jako dělat kariéru. Aby mohl jezdit na kole, raději pracuje jako poslíček. Jeho život je neřízená střela, ve které neplatí žádná pravidla. Ale problémy se na sebe na kupí a je stále těžší před nimi ujet …<br> <br>
<strong>VE STÍNU 18.10.-24.10. ve 20:30 a 20.10.-22.10. též v 16:15</strong><br>Krimi. ČR/98´. Režie: D.Vondříček Hrají: I.Trojan, S.Koch, S.Norisová, J.Štěpnička, M.Taclík<br>Kapitán Hakl (Ivan Trojan) vyšetřuje krádež v klenotnictví. Z běžné vloupačky se ale vlivem zákulisních intrik tajné policie začíná stávat politická kauza. Z nařízení Státní bezpečnosti přebírá Haklovo vyšetřování major Zenke (Sebastian Koch), policejní specialista z NDR, pod jehož vedením se vyšetřování ubírá jiným směrem, než Haklovi napovídá instinkt zkušeného kriminalisty. Na vlastní pěst pokračuje ve vyšetřování. Může jediný spravedlivý obstát v boji s dobře propojenou sítí komunistické policie? Protivník je silný a Hakl se brzy přesvědčuje, že věřit nelze nikomu a ničemu. Každý má svůj stín minulosti, své slabé místo, které dokáže z obětí udělat viníky a z viníků hrdiny. <br><br>
<strong>ASTERIX A OBELIX VE SLUŽBÁCH JEJÍHO VELIČENSTVA ve 3D 20.10.-21.10. ve 13:45 </strong><br>Dobrodružná fantazy. Fr./124´. ČESKÝ DABING. Režie: Laurent Tirard<br>Hrají: Gérard Depardieu, Edouard Baer, Fabrice Luchini<br>Pod vedením Julia Caesara napadly proslulé římské legie Británii. Jedné malé vesničce se však daří statečně odolávat, ale každým dnem je slabší a slabší. Britská královna proto vyslala svého věrného důstojníka Anticlimaxe, aby vyhledal pomoc u Galů v druhé malinké vesničce ve Francii vyhlášené svým důmyslným bojem proti Římanům… Když Anticlimax popsal zoufalou situaci svých lidí, Galové mu darovali barel svého kouzelného lektvaru a Astérix a Obélix jsou pověřeni doprovodit ho domů. Jakmile dorazí do Británie, Anticlimax jim představí místní zvyky ve vší parádě a všichni to pořádně roztočí! Vytočený Caesar se však rozhodne naverbovat Normanďany, hrůzu nahánějící bojovníky Severu, aby jednou provždy skoncovali s Brity. <br><br>
O puede parecerse a algo similar a esto. No hay reglas especiales en el marcado HTML, no hay reglas especiales en orden, etc.
En cuanto al procesamiento del lenguaje natural, si utilizas Python, deberías verificar el fantástico (en mi humilde opinión, no asociado con ellos) Natural Language Toolkit , que tiene implementaciones para muchos algoritmos, muchos de los cuales son independientes del idioma (por ejemplo, n-grams )
Para una recomendación de la biblioteca de aprendizaje automático en python, diría que dependerá de las técnicas que desee utilizar, pero OpenCV implementa algunos algoritmos comunes . El aprendizaje automático es un área muy extensa. Solo para el subproblema de clasificación de aprendizaje supervisado, Naive Bayes, KNN, Decision Trees, Support Vector Machines, al menos una docena de tipos diferentes de redes neuronales ... La lista sigue y sigue. Es por eso que, como dices, no hay "inicios rápidos" o tutoriales para el aprendizaje automático en general. Mi consejo aquí es, en primer lugar, comprender la terminología ML básica , en segundo lugar, comprender un subproblema (aconsejaría la clasificación de aprendizaje supervisado) y, en tercer lugar, estudiar un algoritmo simple que resuelva este subproblema ( KNN basa en matemáticas de nivel secundario) .
Sobre su problema en particular: parece que desea detectar la existencia de un dato (código postal) dentro de un gran conjunto de datos (texto), que es, AFAIK, no el tipo de problema que maneja ML. Un algoritmo de clasificación espera un vector de características relativamente pequeño. Para obtener eso, tendrá que hacer lo que se llama una reducción de dimensionalidad : esto significa, aislar la parte que parecen códigos postales potenciales. Solo entonces el algoritmo de clasificación lo clasifica (como "código postal" o "código no postal", por ejemplo).
Por lo tanto, debe encontrar una forma de aislar posibles coincidencias incluso antes de pensar en usar ML para abordar este problema . Esto seguramente implicará el procesamiento del lenguaje natural, como dijiste, si no usas o no puedes usar regex o análisis sintáctico.
En primer lugar, el aprendizaje automático no es mágico. Estos algoritmos realizan tareas específicas, incluso si a veces pueden ser un poco complejas.
El enfoque básico de cualquier tarea de este tipo es generar algunos datos etiquetados razonablemente representativos, para que pueda evaluar qué tan bien lo está haciendo. Las etiquetas "BOI" podrían funcionar, donde para cada palabra le asigna una etiqueta: "O" (afuera) si no es algo que esté buscando, "B" (principio) si es el comienzo de una dirección, y "I" para todas las palabras siguientes (o números o lo que sea) en la dirección.
El segundo paso es pensar cómo quiere evaluar su éxito. ¿Es importante que descubra la mayor parte de una dirección, o también necesita saber exactamente qué es (código postal, calle o ciudad, etc.)? Esto luego cambia lo que cuenta como un error.
Si desea que su reconocedor de entidad nombrada funcione bien, debe conocer bien sus datos y decidir cuál es la mejor herramienta para el trabajo. Esto bien podría ser una serie de expresiones regulares con algunas reglas sobre cómo combinar los resultados. Espero que puedas encontrar la mayoría de los datos con programas relativamente simples. Una vez que tienes algo simple que funciona, puedes ver los falsos positivos (cosas que resultaron no ser lo que estabas buscando) y los falsos negativos (cosas que te perdiste), y buscar patrones. Si ve algo que pueda arreglar fácilmente, pruébelo. Una gran ventaja de regex es que es mucho más fácil no solo reconocer algo como parte de una dirección, sino también detectar qué parte es.
Si quiere ir más allá, puede encontrar que muchos métodos de PNL no funcionan bien en sus datos, ya que el "Procesamiento de lenguaje natural" generalmente necesita algo que parezca (lo adivinó) Lenguaje natural para reconocer qué es algo.
Alternativamente, dado que puede verlo como un problema de fragmentación, podría usar Modelos de Markov de entropía máxima. Esto utiliza las probabilidades de pasar de un tipo de palabra a otro a un trozo de texto en "parte de una dirección" y "no parte de una dirección", en este caso.
¡Buena suerte!
Había construido una solución exactamente para esto. Mi objetivo era extraer toda la información relacionada con las competiciones disponibles en Internet. Usé un tweak Lo que hice es que detecté el patrón en el que se incluye la información en los sitios web. En mi caso, fueron enumerados uno por uno debajo del orden, detecté que usando las etiquetas de la tabla html y obtuve la información relacionada con las competencias.
Si bien es una buena solución, funciona para algunos sitios y para otros el mismo código no funcionará. Pero solo tiene que cambiar algunos parámetros en el mismo código para que funcione.
Le sugiero que mire el campo de la extracción de información . Mucha gente ha estado investigando cómo hacer exactamente lo que estás preguntando. Existen algunas técnicas para la extracción de información basadas en el aprendizaje automático, algunas técnicas que no se basan en el aprendizaje automático.
Es difícil hacer más comentarios sin mirar ejemplos representativos del problema que desea resolver (¿cómo se ve una dirección postal en checo?).
Primero, su tarea encaja en el área de investigación de extracción de información . Hay principalmente 2 niveles de complejidad para esta tarea:
- extraer de una página html determinada o un sitio web con la plantilla fija (como Amazon). En este caso, la mejor manera es mirar el código HTML de las páginas y crear los selectores correspondientes de XPath o DOM para obtener la información correcta. La desventaja de este enfoque es que no se puede generalizar a sitios web nuevos, ya que tiene que hacerlo para cada sitio web uno por uno.
- cree un modelo que extraiga la misma información de muchos sitios web dentro de un dominio (asumiendo que hay cierta regularidad inherente en la forma en que los diseñadores web presentan el atributo correspondiente, como zip o teléfono o lo que sea). En este caso, debe crear algunas características (para usar el enfoque ML y dejar que el algoritmo IE "entienda el contenido de las páginas"). Las características más comunes son: ruta del DOM, el formato del valor (atributo) que se extraerá, el diseño (como negrita, cursiva, etc.) y las palabras del contexto circundante. Usted etiqueta algunos valores (necesita al menos 100-300 páginas según el dominio para hacerlo con algún tipo de calidad razonable). Luego, entrena un modelo en las páginas etiquetadas. También existe una alternativa: hacer IE de forma no supervisada (aprovechando la idea de la regularidad de la información en todas las páginas). En este caso, usted / su algoritmo intenta encontrar patrones repetitivos en las páginas (sin etiquetar) y considerarlos como válidos, que son los más frecuentes.
La parte más desafiante en general será trabajar con el árbol DOM y generar las características correctas. También el etiquetado de datos de la manera correcta es una tarea tediosa. Para los modelos ML, eche un vistazo a CRF, 2DCRF, CRF semi-markov .
Y, por último, esto es, en general, una vanguardia en la investigación de IE y no un truco que puede hacerlo algunas noches.
ps también creo que NLTK no será muy útil: es una biblioteca PNL, no Web IE.
Según sé, hay dos maneras de hacer esta tarea usando el enfoque de aprendizaje automático.
1.Utilizando la visión por computadora para entrenar el modelo y luego extraer el contenido en función de su caso de uso, esto ya ha sido implementado por diffbot.com. y no han abierto la fuente de su solución.
2. La otra forma de evitar este problema es utilizar el aprendizaje automático supervisado para entrenar al clasificador binario para clasificar el contenido frente a un texto repetitivo y luego extraer el contenido. Este enfoque se usa en la dragnet. y otra investigación en esta área. Puede echar un vistazo a la comparación de puntos de referencia entre diferentes técnicas de extracción de contenido.
Tenga en cuenta que hay un sitio de intercambio de pila dedicado al aprendizaje automático y análisis estadístico denominado Cross Validated. Es mucho más probable que encuentre allí información relevante para su problema.
Aunque se necesitan algunas habilidades de programación, Machine Learning como campo es realmente una especialidad de programación y análisis de datos. Tiene su propio "lenguaje" y asume una comprensión básica de las operaciones de la matriz y el álgebra lineal en general. Gran parte del trabajo que un especialista en ML debe hacer, implica la manipulación de sus datos fuente en una forma que los algoritmos puedan usar.
En Cross Validated, encontrarás a las personas que realmente resuelven este tipo de problemas a diario, pero prepárate para sumergirte en el agujero conejo ML. Hay mucho por aprender.