Aplicación de tecnología inteligente de preguntas y respuestas en la búsqueda de Baidu

Autor | Xiaodong

Introducción

Este artículo presenta principalmente la aplicación de tecnología inteligente de preguntas y respuestas en la búsqueda de Baidu. Incluyendo el historial de desarrollo de la respuesta automática a preguntas, la respuesta generativa a preguntas y las aplicaciones de respuesta inteligente a preguntas de búsqueda de Baidu. Todos son bienvenidos a unirse al equipo de búsqueda de Baidu y explorar conjuntamente la dirección de desarrollo de la tecnología inteligente de preguntas y respuestas. Hay un método de envío de currículum al final del artículo.

El texto completo tiene 6474 palabras y el tiempo estimado de lectura es de 17 minutos.

01 ¿Qué es la respuesta automática a preguntas?

La respuesta automática a preguntas consiste en permitir que los sistemas de software respondan automáticamente preguntas descriptivas planteadas por humanos. Por ejemplo, si preguntamos: "¿Cuál es el nombre del programa presentado por Wang Xiaoya?", podemos ingresar cualquier pregunta descrita en lenguaje natural en el cuadro de búsqueda de Baidu y obtener la respuesta relevante directamente en el primer resultado de la búsqueda. como se muestra en la siguiente figura:

imagen

A diferencia de los motores de búsqueda tradicionales que recuperan enlaces web basándose en comentarios de múltiples palabras clave, las preguntas y respuestas automáticas obtienen directamente respuestas basadas en preguntas descritas en lenguaje natural, lo que puede mejorar en gran medida la eficiencia de la adquisición de información de todos. Las preguntas y respuestas automáticas están en todas partes en la vida: según las estadísticas, alrededor del 40% de las necesidades de búsqueda y aproximadamente el 30% de las necesidades de conversación están relacionadas con las preguntas y respuestas automáticas.

Entonces, ¿cuál es el estado actual de las aplicaciones de respuesta automática a preguntas en Baidu Search? En la actualidad, el primer resultado puede satisfacer directamente la mayoría de las necesidades de preguntas y respuestas, y en la búsqueda de Baidu, no hay límite para el campo de preguntas del usuario: es un sistema abierto de preguntas y respuestas que puede solicitar cualquier información.

1.1 La historia del desarrollo de la respuesta automática a preguntas.

El historial de desarrollo de la respuesta automática a preguntas es el siguiente, que es coherente con el desarrollo del aprendizaje automático.

imagen

Desde la perspectiva del desarrollo de métodos modelo:

Antes de 2013, todos hacían principalmente algún trabajo relacionado con la ingeniería de características, es decir, daban una pregunta y algunas respuestas candidatas, diseñaban una variedad de características de coincidencia literal y calculaban el grado de coincidencia de palabras entre la pregunta y la respuesta, como BM25 y otros. algoritmos.

De 2014 a 2015, con el desarrollo del aprendizaje profundo, todos utilizarán redes neuronales para calcular la distancia semántica entre preguntas y respuestas, como CNN, RNN, etc.

De 2016 a 2017, todos utilizarán la estructura de la red de Atención para diseñar varias estructuras modelo para caracterizar aún más la profunda relación de coincidencia semántica entre preguntas y respuestas.

De 2018 a 2021, la investigación se centrará principalmente en modelos de capacitación, y se utilizarán algunos modelos previamente entrenados más grandes y mejores para completar tareas complejas de combinación de preguntas y respuestas.

A partir de 2022, todo el mundo prestará más atención a la aplicación de modelos generativos.

Desde la perspectiva del desarrollo del conjunto de datos:

En 2013, apareció MCTest, principalmente en forma de preguntas de opción múltiple y cierre.

En 2016 nació SQuAD, la primera información de datos de comprensión lectora a gran escala que extrae respuestas de un artículo proporcionado en función de las preguntas de los usuarios.

En 2017, Baidu lanzó el conjunto de datos DuReader, que es el primer conjunto de datos de comprensión lectora chino.

En 2018, se lanzó HotputQA y otros para realizar investigaciones más profundas en escenarios complejos de preguntas y respuestas, como el razonamiento de múltiples saltos y el razonamiento de sentido común.

1.2 Modelado de respuesta automática a preguntas

El paradigma dominante actual: Retriever + Reader

Retriever = candidato de consulta basado en la consulta. Es decir, ante una consulta obtener candidatos relevantes para la consulta, que pueden ser páginas web, videos, tablas, gráficos de conocimiento, etc.

Lector = Obtener información de respuesta de un candidato determinado. Es decir, en función de los candidatos dados, la respuesta se extrae aún más en función de la consulta.

La búsqueda de Baidu es un Retriever muy poderoso que puede proporcionar consultas de candidatos relevantes, por lo que nuestro trabajo de investigación se centra más en Reader, es decir, cómo completar mejor la extracción de respuestas en función de los resultados de búsqueda.

imagen

El primer Reader se basaba principalmente en el método tradicional de ingeniería de características y era un proceso de canalización muy complejo y sistemático: primero analiza la consulta para obtener el tipo de respuesta esperado, información de entidad, tipo de pregunta, etc., y recupera varios candidatos de la biblioteca de candidatos. basado en esta información. Y diseñar funciones de coincidencia complejas para calcular la puntuación de correlación entre la consulta y el candidato, y diseñar una función de clasificación para ordenar y obtener la respuesta mejor clasificada. El proceso es el siguiente.

imagen

Este proceso se canaliza en serie y los errores se acumulan en cada paso. Todo el proceso de capacitación no se puede repetir en su totalidad y el costo de mantenimiento es alto. Más tarde, todos esperaban encontrar un método más integral para resolver los problemas anteriores y se propuso la comprensión de lectura automática (MRC).

La definición de la tarea MRC es: ingresar Pregunta + Documento, reemplazar directamente el proceso complejo con un modelo y generar Respuesta. Los primeros trabajos del MRC diseñarían algunas estructuras de red relativamente complejas para modelar la relación entre preguntas y respuestas. Un método más clásico es BiDAF. Su capa de entrada asigna todo el documento y la consulta a representaciones incrustadas, y cada una aprende la representación de la pregunta y el contexto del documento a través de LSTM y otras redes, y luego, a través de la capa de interacción Atención, se utiliza la atención bidireccional. Se modela la relación entre consulta y documento y, sobre esta base, se obtiene una representación de contexto más rica a través de la red LSTM. La capa de salida final predice la probabilidad de que cada posición comience y termine como respuesta, y el fragmento con mayor probabilidad es extraído como respuesta.

imagen

El diseño inicial de la estructura del modelo mostró un estado de florecimiento, con el fin de resolver mejor los problemas y modelar las respuestas.

Más tarde, los modelos de pre-entrenamiento se desarrollaron gradualmente y todos se dieron cuenta de que no es necesario un diseño de estructura de modelo complejo. Transformer es la mejor estructura de modelo hasta ahora, lo que puede liberar más energía de investigación en el trabajo de pre-entrenamiento y prestar más atención al pre-entrenamiento. Diseño de tareas de entrenamiento, función de pérdida, datos previos al entrenamiento, etc.

En este caso, se han producido varios modelos de capacitación previa, como el primer BERT y ERNIE de Baidu. Estos modelos de capacitación previa simplificarán el MRC. Todos ingresarán la consulta y el documento como una secuencia. Consulta y documento Los documentos pueden separarse mediante algunos símbolos especiales. Después del modelado de representación semántica del modelo previamente entrenado, las posiciones inicial y final de la respuesta aún se predicen y extraen.

imagen

02 Preguntas y respuestas generativas

El reciente desarrollo de la tecnología generativa es muy interesante y se han publicado muchos trabajos.

Un lector generativo temprano relativamente representativo fue S-NET en 2017, que fue diseñado especialmente para el conjunto de datos MS-MARCO. La característica de este conjunto de datos es que las respuestas provienen de varios artículos y no son necesariamente las mismas que el vocabulario del texto original. .

Para tal tarea, la idea natural es utilizar un enfoque generativo para resolver este problema. Diseña un proceso de dos etapas. La primera etapa es el modelo de extracción de respuestas, que es muy consistente con el modelo que presentamos anteriormente. También introduce una tarea adicional de clasificación de pasajes para clasificar los artículos candidatos según su relevancia. La segunda etapa es generar el modelo, ingresar los resultados extraídos y generar un resumen de las respuestas, como se muestra en la siguiente figura.

imagen

Se puede ver que estos primeros trabajos son muy similares al proceso generativo de preguntas y respuestas que usamos ahora. También agregaremos un módulo de recuperación, que es el Retriever que acabamos de mencionar primero, y luego la extracción, clasificación y generación de candidatos. Sin embargo, este trabajo aún depende de información adicional para realizar resúmenes de referencia. Quizás se pregunte: ¿es posible tener un modelo generativo que genere respuestas directamente sin depender de nosotros para ingresar información y conocimientos adicionales?

El modelo T5 resolvió este problema por primera vez en 2019. En ese momento, adoptó la idea de "formación previa + aprendizaje por transferencia" para unificar diferentes tareas de PNL bajo el paradigma generativo para completar de manera uniforme preguntas y respuestas, traducción automática, análisis de sentimientos y diálogo. ... y una serie de tareas, y respondió preguntas directamente a través del conocimiento almacenado en un modelo grande con decenas de miles de millones de parámetros (que era relativamente grande en ese momento). También verifica la estructura de diferentes modelos generativos, incluidos codificador-decodificador, solo decodificador e híbrido.

Sin embargo, aunque modelos como el T5 pueden completar algunas preguntas y respuestas simples, no son suficientes para alcanzar un estado comercial que pueda usarse directamente, todavía hay margen de mejora en sus parámetros y métodos de entrenamiento, y no puede lograr directamente muy buenos. resultados para algunos problemas generales. Hasta la aparición de ChatGPT, adoptará una escala de parámetros más grande (cientos de miles de millones) y tendrá capacidades de alineación de respuestas humanas más sólidas para comprender las instrucciones del usuario y completar preguntas y respuestas más complejas. Se puede decir que ChatGPT es un producto de conversación y preguntas y respuestas que ha alcanzado nivel comercial.

03 Aplicación inteligente de preguntas y respuestas para la búsqueda de Baidu

Los escenarios de preguntas y respuestas de la búsqueda de Baidu son ricos y diversos. También hay muchas formas de extraer respuestas. Por ejemplo, podemos obtener algunos gráficos de conocimiento de enciclopedias o páginas web mediante la extracción de información y extraer respuestas en los gráficos de conocimiento; una forma más general es extraer respuestas directamente del texto de la página web mediante la lectura. comprensión; También puede extraer más información de algunos datos semiestructurados, como tablas, y organizarla de una manera más estructurada para mostrarla. No sólo texto, sino también la comprensión y extracción de contenidos de vídeo.

imagen

Ante un escenario de preguntas y respuestas tan rico y diverso, ¿a qué desafíos nos enfrentamos?

Desafío 1 : ¿Las preguntas y respuestas de las máquinas enfrentan dificultades en la comprensión semántica compleja, el razonamiento y el modelado de contexto?

Desafío 2 : Ante el alto tráfico de búsqueda y la demanda de modelos complejos en la respuesta automática de preguntas, ¿cómo lograr una respuesta rápida?

Desafío 3 : En un escenario de búsqueda de campo abierto, los datos de la página web son muy complejos y la calidad de las respuestas varía (errores, unilateralidad) ¿Cómo proporcionar respuestas correctas y de alta calidad?

3.1 Resolver las dificultades de la comprensión semántica compleja, el razonamiento y el modelado de contexto.

Por ejemplo, en el primer ejemplo, como se muestra en la imagen a continuación, la respuesta menciona "ella", lo que requiere resolución de referencia y comprensión del contexto, y el contexto puede ser muy largo. Solo a través de una comprensión profunda podemos saber lo que se necesita Es un concurso de preguntas, no otro espectáculo. La solución a este problema se basa en algunos modelos muy complejos.

imagen

La solución que adoptamos es "modelo grande + preformación".

En el entrenamiento previo, utilizaremos datos muy ricos, que incluyen varias etapas:

  • Primero, utilice texto general de nivel T para realizar un entrenamiento previo para aprender el modelo de lenguaje básico;

  • Además, se utilizan cientos de gigabytes de registros comerciales para la capacitación previa posterior a fin de lograr la migración de dominio y destino;

  • Además, llevamos a cabo una extracción de datos detallada y ajustamos con precisión los efectos comerciales a través de datos anotados manualmente de nivel G;

  • Finalmente, la retroalimentación de datos y modelos de circuito cerrado se logra mediante la supervisión remota de la mejora de los datos, la identificación de la calidad de los datos anotados, la extracción automática de datos débiles y la anotación direccional, y la guía del comportamiento del usuario.

Y en cuanto a modelos grandes:

  • Utilice decenas de miles de millones de modelos de parámetros para mejorar la memoria del conocimiento y las capacidades de comprensión del lenguaje.

  • Comprender completamente el contexto con modelado de secuencia larga

Por ejemplo, estamos utilizando un modelo que llamamos modelo DocMRC, que simula que personas responden preguntas de comprensión lectora y leen el artículo completo. La lógica es la que se muestra en la siguiente figura.

imagen

La capa de entrada admite el modelado de secuencia larga, segmentando todos los segmentos de documentos enviados; en particular, insertamos una representación de token antes de cada oración, se usa CLS para agregar la representación de cada oración y la estructura general del modelo de entrada superficial a nivel de palabra es Aprenda el representación local; aprender relaciones contextuales profundas a través de una estructura jerárquica basada en esta representación; finalmente generar el token especial CLS para representar la anotación y generar la respuesta.

La capa de salida tendrá dos salidas: una es generar un resumen parcial de la pregunta y otra introducción de respuestas de varias oraciones. Se utilizará la salida de la capa de oración y luego se realizará la salida de la anotación de secuencia; la otra es enfatizar el contenido clave en la respuesta, que puede ser Varias entidades utilizarán representación de token para la predicción de anotación de secuencia.

3.2 Mejorar la velocidad del modelo general y lograr una respuesta rápida

El tráfico diario de usuarios de búsqueda es muy grande, como se mencionó anteriormente, necesitamos usar modelos más grandes o más complejos, y el consumo de tiempo y recursos de todo el modelo también es muy grande. Entonces, ¿existen otras formas de mejorar la velocidad del modelo general y lograr una respuesta rápida y un equilibrio de recursos?

El modelado jerárquico que acabamos de presentar es una solución para optimizar la estructura del modelo.

Existe otro método general: la destilación del conocimiento, que consiste en refinar el conocimiento de un modelo grande en un único modelo pequeño y mejorar la velocidad de razonamiento cuando el efecto es similar. Aquí adoptamos un modelo de "destilación de múltiples etapas y múltiples maestros".

Para el escenario empresarial de preguntas y respuestas, capacitaremos a varios profesores diferentes y mejoraremos el límite superior de los objetivos de aprendizaje mediante la integración de diferentes profesores. Luego, para la destilación de múltiples maestros, una solución básica es promediar directamente el puntaje o la pérdida de peso de cada maestro y dejar que el estudiante lo ajuste, pero creemos que este método puede no garantizar el efecto final. Esperamos hacer selecciones dinámicas basadas en diferentes muestras (porque diferentes maestros tienen diferentes enfoques), por lo que diseñamos un modelo de destilación de múltiples etapas en el que los maestros se seleccionan dinámicamente en función de los datos, como se muestra en la siguiente figura.

La primera etapa es la capacitación del modelo docente, que capacita a varios docentes para aumentar el límite superior de aprendizaje;

En la segunda etapa , destilación no supervisada, es difícil juzgar la calidad del maestro basándose en datos no etiquetados, por lo que se utiliza la votación entre maestros para seleccionar dinámicamente a los maestros según la dirección del gradiente y eliminar posibles maestros ruidosos;

La tercera etapa es la destilación supervisada, donde los profesores son ponderados dinámicamente en función de muestras etiquetadas.

imagen

A través de un método de destilación de múltiples etapas y múltiples maestros, finalmente obtuvimos un modelo de estudiante con muy buenos resultados, incluso mejores que un solo modelo grande.

3.3 Cómo dar respuestas correctas y de alta calidad

Los datos de preguntas y respuestas en el escenario de búsqueda son muy complejos y la calidad de las respuestas también es desigual. Muchas páginas web pueden contener información incorrecta o una introducción unilateral. Cómo proporcionar respuestas correctas y de alta calidad es el tercer desafío. enfrentamos.

A continuación se muestra un ejemplo de una respuesta compleja a un escenario en la búsqueda. Hay respuestas largas a la izquierda y los usuarios no pueden comprender rápidamente los puntos clave. En este caso, se necesita una forma de resumir para que los usuarios puedan comprender rápidamente la información clave de la respuesta y mejorar la eficiencia de la satisfacción. El método extractivo de extracción de respuestas ya no es suficiente, necesitamos utilizar tecnología de generación para comprimir y resumir las respuestas en profundidad.

imagen

Además, es posible que las respuestas extraídas de un solo artículo no sean lo suficientemente completas. Necesitamos resumir las respuestas de varias páginas web y también generar un modelo, como se muestra en la siguiente figura. Resumimos las respuestas de varios artículos y marcamos las fuentes en las respuestas, para que los usuarios puedan ver claramente de dónde provienen las respuestas.

imagen

En resumen, si desea generar respuestas integrales, eficientes y correctas, necesita un mejor modelo generativo. Actualmente existen muchos modelos de lenguaje grandes, pero ¿qué tipo de modelo de lenguaje grande puede completar las tareas de preguntas y respuestas de los escenarios de búsqueda?

04 Generación mejorada de búsqueda

Actualmente, existen varios problemas con los modelos de lenguaje grandes que realizan preguntas y respuestas directamente:

Primero , es difícil para los grandes modelos de predicción recordar todo el conocimiento, y algunos conocimientos de cola larga pueden ser incorrectos o desconocidos;

En segundo lugar , el conocimiento de grandes modelos lingüísticos queda fácilmente desactualizado y es difícil de actualizar, y los nuevos conocimientos no se pueden percibir de manera oportuna;

En tercer lugar , el resultado de los grandes modelos lingüísticos es difícil de verificar. Actualmente, los usuarios tienen un escaso sentido de confianza y no podemos confiar plenamente en las respuestas generadas directamente por el modelo generativo.

Entonces, en este caso, todos esperan tener algunas formas de realizar alguna verificación de respuesta auxiliar.

4.1 Proceso de generación de mejoras de búsqueda

Para escenarios de preguntas y respuestas de búsqueda, hemos diseñado una solución de generación de mejoras de recuperación, que se ha implementado en la búsqueda de Baidu. La generación de mejoras de recuperación se basa en motores de búsqueda para complementar la información relevante, lo que puede aliviar eficazmente la ilusión de modelos grandes y mejorar la exactitud, puntualidad y credibilidad de las respuestas. El proceso general se divide en varias etapas:

1. En la etapa de recuperación de documentos, se recuperarán múltiples fuentes de referencia;

2. En la etapa de extracción de respuestas, se extraerá información clave del artículo para reducir la carga sobre el modelo generado;

3. En la etapa de redacción inicial, las preguntas se responderán con base en las fuentes de referencia obtenidas y se proporcionarán requisitos específicos, como números de serie que indiquen las fuentes en el contenido de la respuesta;

4. En la etapa de generación de respuestas, la solicitud se ingresa en el modelo grande y finalmente se obtienen los resultados de la búsqueda.

imagen

Como se muestra en la imagen de arriba, puede ver que la respuesta a la derecha es un resumen de varios artículos y la fuente de referencia también estará marcada en él. Esta es la respuesta que esperamos brindar a los usuarios.

4.2 Generar un proceso de capacitación de modelos grandes

Nuestro proceso de capacitación para generar modelos grandes se divide en cuatro etapas, como se muestra en la siguiente figura. Las dos primeras etapas están relativamente cerca del entrenamiento generativo de modelos grandes convencionales actual. En las dos últimas etapas, hemos realizado adaptaciones especiales en la recuperación. -Escenario de generación mejorada de preguntas y respuestas.

imagen

En la primera etapa , preentrenamiento general, tendremos algunos corpus de páginas web generales y corpus verticales, como libros, tablas, conversaciones, etc., para obtener un modelo básico de preentrenamiento general;

En la segunda etapa , afinando las instrucciones, proporcionaré algunas instrucciones generales para que el modelo tenga la capacidad de comprender las instrucciones;

La tercera etapa es marcar las instrucciones comerciales y utilizarlas para realizar ajustes específicos para que pueda comprender el escenario de preguntas y respuestas de la organización de múltiples resultados en el escenario de búsqueda;

La cuarta etapa consiste en realizar ajustes detallados basados ​​en los comentarios sobre el comportamiento del usuario y mejorar la calidad de las respuestas generadas mediante el aprendizaje por refuerzo y otros métodos.

4.3 Aprenda instrucciones complejas mediante el desmontaje de instrucciones

Las instrucciones del escenario empresarial de búsqueda son muy complejas, plantearemos requisitos muy específicos y proporcionaremos fuentes de referencia. Entonces, ¿cómo se consigue que un modelo generativo comprenda instrucciones tan complejas? Una solución es anotar muchas de estas instrucciones complejas e introducirlas en un modelo generativo, pero este enfoque no es necesariamente óptimo. Si el modelo aprende demasiadas instrucciones de este tipo, no podrá lograr mejores efectos de generalización, lo que provocará una disminución en el rendimiento del modelo. ¿Hay alguna otra manera?

Aquí, nos basamos en la idea de cadena de razonamiento (CoT) y proponemos un método de desmontaje de instrucciones para aprender a recuperar instrucciones complejas en el escenario de generación.

Las complejas instrucciones anteriores generalmente se pueden lograr en tres simples pasos:

El primer paso es seleccionar resultados de búsqueda que puedan usarse para responder la pregunta;

El segundo paso es organizar y generar respuestas basadas en los resultados de búsqueda seleccionados;

El tercer paso es agregar fuentes de referencia en forma numerada.

Se puede ver que para instrucciones muy complejas, podemos descomponerlas en múltiples instrucciones simples a través de múltiples pasos. Primero dejaremos que el modelo aprenda y comprenda las instrucciones simples, y luego es posible que el modelo no necesite demasiados datos de las instrucciones complejas. El rendimiento en instrucciones complejas alcanza un muy buen nivel.

4.4 Aceleración de la inferencia y reducción del consumo de recursos

Para algunos modelos discriminativos, se puede utilizar la destilación u otras técnicas. Sin embargo, para los modelos generativos, el pequeño tamaño del modelo tiene un mayor impacto en el efecto. La destilación no es particularmente adecuada y se necesitan algunos otros métodos de aceleración. Recientemente, se han realizado muchos estudios de trabajo relacionados en la industria, como Inferencia con referencia, que es un escenario comercial generado para mejorar la recuperación. Al detectar un prefijo fijo, copie un texto de longitud fija de la referencia como una secuencia candidata y verifique que si es consistente con la salida del modelo, se puede lograr la decodificación paralela paso, como se muestra en la figura siguiente.

imagen

Además, existen algunos métodos de aceleración de generación más generales: por ejemplo, puede utilizar un modelo pequeño para generar rápidamente varios pasos, ingresar los resultados de predicción del modelo pequeño directamente en el modelo grande y el modelo grande verifica si la decodificación es consistente.Al igual que en el trabajo anterior, también se puede lograr la aceleración, pero el requisito es tratar de hacer que el efecto de nuestro modelo pequeño y el modelo grande sea lo más cercano posible, la probabilidad de una predicción precisa será mayor y la aceleración la proporción será mayor.

Finalmente, los dejo con una pregunta para que todos piensen: "¿Cómo será la próxima generación de motores de búsqueda?" Espero su respuesta y bienvenido a discutirla con nosotros.

Correo electrónico de comunicación y entrega de currículum: [email protected]

--FIN--

Lectura recomendada

Admite la práctica de reconstrucción de código OC a través de script Python (1): análisis de relación de llamada de módulo

CVPR2023 Excelente artículo | Análisis del problema de la falta de generalización en el algoritmo de identificación de imágenes falsificadas AIGC

Completa el diseño y desarrollo de códigos exclusivos en un solo artículo.

Guía de velocidad de aplicaciones nativas de IA

Introducción a la aplicación práctica de la tecnología de comprensión de código.

Lei Jun anunció la arquitectura completa del sistema ThePaper OS de Xiaomi, diciendo que la capa inferior ha sido completamente reestructurada. Yuque anunció la causa de la falla y el proceso de reparación el 23 de octubre. Nadella, CEO de Microsoft: Abandonar Windows Phone y el negocio móvil fue una decisión equivocada Las tasas de uso de Java 11 y Java 17 excedieron a Java 8. Hugging Face tuvo restringido el acceso a Yuque. La interrupción de la red duró aproximadamente 10 horas y ahora ha vuelto a la normalidad. La Administración Nacional de Datos presentó oficialmente Oracle. Lanzó la extensión de desarrollo de Java para Visual Studio Código Musk: Done mil millones si Wikipedia pasa a llamarse "Enciclopedia Weiji" USDMySQL 8.2.0 GA
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/u/4939618/blog/10123217
Recomendado
Clasificación